|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 1999
Città: Milano
Messaggi: 531
|
[c++] eseguire un metodo in un thread
Ciao a tutti, vorrei eseguire un metodo in un thread differente. Mi spiego:
class SomeClass{ public: void metodoThread(); void avviaThread(); } void SomeClass::metodoThread(){ //do something //may be calling other methods (with mutex ect ect) } void SomeClass::avviaThread(){ thread = funzionechestocercando(metodoThread); } ho provato con i pthread... ma mi da casini. Sono riuscito a far partire un metodo statico, ma poi da questo metodo non riesco a chiamare altri metodi... qualcuno ha fatto qualcosa del genere? sto provando a vedere un pò le api di Boost ma senza grandi risultati... grazie anticipate!
__________________
Vintage signature: Abit nf7-s, Xp 2500+@2300mhz, 256 mb 418mhz cas2, geforce fx5700,S-ATA 160 Maxtor,Lg gsa 4120b...prima..ma ora..DELL INSPIRON 6400, ATI X1300... |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Con i pthread puoi far partire un metodo statico, però passando come parametro al metodo statico (il 4° argomento di pthread_create è l'argomento che viene passato al metodo statico sotto forma di void *) il puntatore ad un'istanza della classe, allora puoi far eseguire qualsiasi metodo della classe.
Ad esempio: Codice:
class AbstractThread
{
public:
virtual void * run() = 0;
static void runner(void * concreteThreadInstance)
{
pthread_exit(((AbstractThread *)concreteThreadInstance)->run());
}
};
class MyThread: public AbstractThread
{
public:
MyThread();
virtual void * run()
{
doSomething();
return NULL;
}
};
MyThread myThread;
int ret = pthread_create(pthread, NULL, AbstractThread::runner, (void *)myThread);
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 1999
Città: Milano
Messaggi: 531
|
gentilissimo! grazie.
Posso avviare nel costruttore un thread che in realtà è un metodo?.....la vedo un pò sporchina....però vorrei poter accedere ad altri metodi della classe stessa e fare una sorta di trigger, sempre tutto sincronizzato ect...come la vedi?
__________________
Vintage signature: Abit nf7-s, Xp 2500+@2300mhz, 256 mb 418mhz cas2, geforce fx5700,S-ATA 160 Maxtor,Lg gsa 4120b...prima..ma ora..DELL INSPIRON 6400, ATI X1300... |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sinceramente nel costruttore la cosa la vedo un po' male...in un altro metodo puoi farlo sicuramente ed è anche un'ottima organizzazione per un thread.
Codice:
class AbstractThread
{
virtual void * run() = 0;
public:
static void runner(void * concreteThreadInstance)
{
pthread_exit(((AbstractThread *)concreteThreadInstance)->run());
}
virtual void start()
{
//qui richiami la pthread_create passando this come argomento
}
};
class MyThread: public AbstractThread
{
virtual void * run()
{
doSomething();
return NULL;
}
public:
MyThread();
};
Ultima modifica di cionci : 18-01-2009 alle 00:34. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Avevo fatto un errore nel posizionare start
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 1999
Città: Milano
Messaggi: 531
|
grazie grazie grazie!
sei stato veramente gentilissimo. Alla prossima!!
__________________
Vintage signature: Abit nf7-s, Xp 2500+@2300mhz, 256 mb 418mhz cas2, geforce fx5700,S-ATA 160 Maxtor,Lg gsa 4120b...prima..ma ora..DELL INSPIRON 6400, ATI X1300... |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 1999
Città: Milano
Messaggi: 531
|
per tutti quelli che volessere utilizzare queste info c'è un picolissimo errore che cmq non sminuisce il grandissimo aiuto..
Codice:
static void runner(void * concreteThreadInstance)
=>
static void *runner(void * concreteThreadInstance)
__________________
Vintage signature: Abit nf7-s, Xp 2500+@2300mhz, 256 mb 418mhz cas2, geforce fx5700,S-ATA 160 Maxtor,Lg gsa 4120b...prima..ma ora..DELL INSPIRON 6400, ATI X1300... |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Giusto
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:09.



















