Jak przekazać połączenie do wątku ?

0

Mam zagwostkę od kliku dni. Chodzi o to, że chce sobie przanalizować połączenie do bazy danych za pomoca bilbioteki PQXX, a nastepnie identyfikator polączenia przekazać do wątku który bedzie mogł również robić wpisy do bazy bez ponownego łączenia. Mam zatem jedna z funkcji która jest odpalona w wątku a wyglada ona tak:

void *updateServerStatus(void * p)
{
   while(true) {
      //work u(c);
      //result k = w.exec(" UPDATE tabA SET last = NOW() WHERE name = 'test' ");
      //u.commit();
      sleep(2);
    }
}

Powyzej watek powinien co 2 sekundy robic update z data i czasem

W glownym watku realizuje dla przykladu dwie rzeczy. Pierwsze lacze sie z baza i cos w niej zmieniam,
a druga rzecz to uruchamiam watek:

int main( void ) {

pthread_t threadUpdateServerStatus;
connection c("dbname=baza user=postgres password=password hostaddr=127.0.0.1 port=5444"); 

//musze sprawdzic czy nawiazano polaczenie	
pthread_create( &threadUpdateServerStatus, NULL, &updateServerStatus, &c);

work w(c);
result r = w.exec("INSERT INTO tableB(timedate) VALUES(now())");
w.commit();

return 0;
}

Teraz ten kod z insertem do bazy dziala bez problemu. Chcialem tylko sprawdzic czy jesli jest polaczenie z baza to odpale watek i w odpaleniu na koncu przekazuje parametr "&c"

pthread_create( &threadUpdateServerStatus, NULL, &updateServerStatus, &c);

ALe nie wiem czy tak to powinno wygladac.
I jak ten parametr odebrac w funkcji z watku ?
Czy moze poszukac jakiejs klasy konkretnej do bazy ?

Co tu najlepiej zrobic?

0
masterO napisał(a):

I jak ten parametr odebrac w funkcji z watku ?

void *updateServerStatus(void * p)
{
    connection &c = *reinterpret_cast<connection*>(p);

Podstawowe pytanie. Czy mechanizm DB który używasz (klasa connection itd.) wspiera wielowątkowość?

0

biblioteka pqxx mysle ze wspira wielowatkowosc ale nie wiem, zaraz sprawdze to co wyzej czy zadziała.
EDIT: Zadziałało , dziekuje

1 użytkowników online, w tym zalogowanych: 0, gości: 1