PDA

Visualizza la versione completa : [C++] Utilizzare una classe in un thread


paocoz
13-10-2011, 17:54
Ciao a tutti

ho creato una classe e l'ho istanziata in un modulo (main). dallo stesso modulo ho lanciato un thread. Come posso utilizzare la classe del modulo (main) nella thread ?

XAlbeX
13-10-2011, 22:32
dovresti usare un puntatore o un reference ...

paocoz
14-10-2011, 10:12
Sono troppo neofita per capire cosa fare. Allego il codice della main. Riesci a darmi qualche suggerimento in pių ?

cdblog č la classe che vorrei utilizzare nel tread.

wrpDbSqlite cdblog;

// ----------------------------------------
// --- Code

int main(int argc, char* argv[])
{
CThrLocbus *m_pCommThread;

fprintf(stderr, "Start program\n");

// Open db
if( cdblog.db_open("testdb") != SQLITE_OK ) {
// failed
fprintf(stderr, "Can't open database: %s\n", cdblog.db_errmsg());
fprintf(stderr, "Program terminated\n");
return 0;
} else {
// Open with success
fprintf(stderr, "Open database successfully\n");
// Create table if not exists
cdblog.db_create();
// Do PREPARE
cdblog.db_prepareIns("insert into tbLog (FirstName, LastName, CodeId, NumDevice, DateLog) values (?, ?, ?, ?, datetime('now'))");

//************************* Initialize Comm thread
m_pCommThread = new CThrLocbus();
if (m_pCommThread) {
m_pCommThread->run();

paocoz
14-10-2011, 10:15
Sono troppo neofita per capire cosa fare. Allego il codice della main. Riesci a darmi qualche suggerimento in pių ?

cdblog č la classe che vorrei utilizzare nel tread.

wrpDbSqlite cdblog;

// ----------------------------------------
// --- Code

int main(int argc, char* argv[])
{
CThrLocbus *m_pCommThread;

fprintf(stderr, "Start program\n");

// Open db
if( cdblog.db_open("testdb") != SQLITE_OK ) {
// failed
fprintf(stderr, "Can't open database: %s\n", cdblog.db_errmsg());
fprintf(stderr, "Program terminated\n");
return 0;
} else {
// Open with success
fprintf(stderr, "Open database successfully\n");
// Create table if not exists
cdblog.db_create();
// Do PREPARE
cdblog.db_prepareIns("insert into tbLog (FirstName, LastName, CodeId, NumDevice, DateLog) values (?, ?, ?, ?, datetime('now'))");

//************************* Initialize Comm thread
m_pCommThread = new CThrLocbus();
if (m_pCommThread) {
m_pCommThread->run();
}
}

Grazie mille

XAlbeX
15-10-2011, 14:03
Avevo capito male.. Tu vuoi rendere visibile lo stesso oggetto a due o pių moduli?
Usa la parola chiave extern per specificare che l'istanza della variabile si trova in un altro modulo.

paocoz
17-10-2011, 10:31
Ho dichiarato

extern wrpDbSqlite cdblog;

nella thread e tutto funziona !

Grazie mille !!!

Loading