Breakermind Temat założony przez niniejszego użytkownika |
C++ Thread worker z mysql connections » 2017-10-12 11:56:23 Mysql thread id: unsigned long trID = mysql_thread_id( connect );
Pobieranie danych z różnych tredów: UPDATE messages SET thread_owner =: trID WHERE thread_owner = 0 LIMIT 15
lub blokowanie tabeli LOCK TABLES mytable WRITE; UPDATE messages SET thread_owner =: trID WHERE thread_owner = 0 LIMIT 15; UNLOCK TABLES;
Pobieranie z tabeli: SELECT * FROM messages WHERE thread_owner =: trID AND sendtime < NOW();
|
|
Breakermind Temat założony przez niniejszego użytkownika |
» 2017-10-12 16:42:14 Dlaczego jeżeli mam error inicjalizacja mysql cały program się wykłada zamiast wykonywać pętle w nieskończoność? Jak temu zapobiec aby przechwycony error ni powodował zamknięcia programu (w pętli while jest klasa która odpala mysql_init() po przechwyceniu mysql_error program się zamyka z błędem) mam petle try{}catch etc..? Takie coś może: #include <signal.h>
extern "C" void handle_aborts( int signal_number ) { cout << "Erro " << signal_number << endl; }
signal( SIGABRT, & handle_aborts );
Lista sygnałów z terminala: lub https://www.tutorialspoint.com/cplusplus/cpp_signal_handling.htm |
|
Breakermind Temat założony przez niniejszego użytkownika |
» 2017-10-13 14:52:10 Dlaczego mysql_connect error zamyka moją aplikację pomimo umieszczenia go w try{ }catch({ } i przechwyceniu errora (można to jakoś wyłączyć) cały main mam w pętli: while( 1 ) { try { } catch( std::exception & e ) { continue; } }
Jak zablokować zamykanie aplikacji pomimo pojawiających się errorów (Co jest z tym c++ na linuxie)? try { .... } catch( std::exception & e ) { cout << "# ERR: MainErrorException in " << __FILE__; cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl; cout << "# ERR: " << e.what() << endl; continue; } catch( const std::runtime_error & re ) { std::cerr << "Runtime error: " << re.what() << endl; } catch( std::bad_alloc & e ) { std::cerr << "Allocation error" << endl; } catch(...) { std::cerr << "Unknown failure occurred. Possible memory corruption" << endl; }
|
|
mateczek |
» 2017-10-13 15:09:35 wyjątki trzeba obsłużyć czyli pisząc klasę c++ ta klasa musi rzucić wyjątkiem. Try, Cath nie działa z automatu reaguje tylko na błędy które przewidział programista biblioteki. przykład klasa macierzy ma taki kod matrix matrix::operator *( matrix & m ) { if( kolumny != m.wiersze ) throw "nie pomnozysz takich macierzy"; [...] matrix m3; try { m3 = m1 * m2; } catch( char const * p ) { cout << p << endl; return 0; }
Poniższy przykład normalnie wywali program #include <iostream> using namespace std;
int main() { int a = 0; int b = 5; try { int c = b / a; cout << c; } catch( char const * p ) { cout << "nie podzielisz"; } }
|
|
Breakermind Temat założony przez niniejszego użytkownika |
» 2017-10-13 15:43:44 "każdy inny błąd wyście poza tablice normalnie wywali program" No i czy nie można jakoś zablokować tego wywalania (żeby działała pomimo błędu)? Trochę o exception: #include <iostream> #include <exception>
using namespace std;
struct MyException : public exception { const char * what() const throw() { return "My exception happened - C++ Exception"; } };
class MyException : public exception { virtual const char * what() const throw() { return "My exception happened"; } } MyEx;
int main() { try { throw MyException(); } catch( MyException & e ) { std::cout << "MyException caught" << std::endl; std::cout << e.what() << std::endl; } catch( std::exception & e ) { } }
A jak dodać kilka errorów(exceptions) w jednej klasie? |
|
DejaVu |
» 2017-10-16 21:01:55 A masz dll-kę obok swojej aplikacji? Bo jak jej nie masz, a linkowałeś dynamicznie to będzie Ci się wykładała aplikacja w momencie wykonania odwołania do czegoś, co nie ma swojej implementacji. No i nie przechwycisz takiego błędu skutecznie. |
|
Breakermind Temat założony przez niniejszego użytkownika |
» 2017-10-16 21:18:50 Jeżeli same się nie dodają to ja ich nie podłączam ;). Kompiluję ze standardowymi bibliotekami z linuxa (instaluje z apt-get linkuje przez -L -I -lssl itd.) nie tworzę w sumie swoich bibliotek, wszystkie swoje pliki dodaje w trakcie kompilacji z g++ file.cpp file.h itd... chcę w sumie aby tak było, puki co. (Potencjalny user ma sobie zainstalować potrzebne libs). Może jednak lepszym pomysłem było by dodanie wszystkiego do pliku.
Chcę żeby plik do odpalenia był nie duży i wsie biblioteki czerpał z linuxowego /user/include czy skąd tam on je bierze. I puki co działa, jutro dopiszę całość to posprawdzam i przetestuję na świeżej instalacji na vps.
A w sumie to jak dorzucić wszystkie potrzebne pliki, biblioteki do pliku który odpalam (żeby wszystko było w jednym pliku, czy kompilator sam je dodaje)?
Kompiluje np: g++ -o runMe file.cpp file.h klas.cpp klas.h -lssl -lcrypto -std=c++11 -pthread -L/usr/include/mysql -lmysqlclient -I/usr/include/mysql -Wall -Wextra -pedantic -std=c++14 db.h db.cpp sslsmtpex.h sslsmtpex.cpp dnsspf.cpp
Co dodać aby wszelkie biblioteki, pliki dodały się do runME?
Ps. coś mi się chyba przez mysql connector sypało i kilka nieścisłości ;) przepisałem na mysql_query dodałem kilka try{}catch(..){ } i jakoś lepiej i przejrzyściej.
|
|
Breakermind Temat założony przez niniejszego użytkownika |
» 2017-10-17 09:51:49 Static library: gcc - Wall - c ctest1.c ctest2.c ar rcs libctest.a ctest1.o ctest2.o gcc - static cprog.c - L.- lctest - o cprog ./ cprog
Dynamic library: gcc - Wall - fPIC - c ctest1.c ctest2.c gcc - shared - Wl, - soname, libctest.so.1 - o libctest.so.1.0 ctest1.o ctest2.o ln - sf libctest.so.1.0 libctest.so ln - sf libctest.so.1.0 libctest.so.1 gcc - Wall - L.cprog.c - lctest - o cprog export LD_LIBRARY_PATH =. ./ cprog
gcc - Wall - fPIC - c ctest1.c ctest2.c gcc - shared - Wl, - soname, libctest.so.1 - o libctest.so.1.0 ctest1.o ctest2.o ln - sf libctest.so.1.0 libctest.so ln - sf libctest.so.1.0 libctest.so.1 gcc - Wall - o cprog cprog.c - ldl export LD_LIBRARY_PATH =. ./ cprog
Pliki: ctest1.c void ctest1( int * i ) { * i = 100; }
ctest2.c void ctest2( int * i ) { * i = 5; }
cprog.c #include <stdio.h> void ctest1( int * ); void ctest2( int * );
int main() { int x; int y; int z; ctest1( & x ); ctest2( & y ); z =( x / y ); printf( "%d / %d = %d\n", x, y, z ); return 0; }
Link: http://www.techytalk.info/c-cplusplus-library-programming-on-linux-part-one-static-libraries/ http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html |
|
1 « 2 » 3 |