PDA

Visualizza la versione completa : [C++] MultiThread


return
02-06-2014, 15:18
Salve a tutti ragazzi , ho un problema in C++ con la funzione _beginthread:Comincio subito col dirvi che questo problema mi viene solamente quando utilizzo le classi.


void Client_s::Thread()
{ _beginthread((void (__cdecl*)(void*))Thread,0,0);}

Con questo codice , mi dava problema : "non si pu convertire da overloaded-function a'void (__cdecl *)(void *)"Quindi ho provato con questo :


_beginthread(this->Thread,0,0);

Ma mi veniva dato un altro errore : &namespace::Classe::Thread': chiamata di funzione senza elenco di argomenti; utilizzare 'namespace::classe::Thread' per creare un puntatore al membro.Avete soluzioni? Grazie a tutti in anticipo ;)

oregon
02-06-2014, 16:15
Per i thread devi impostare un metodo di classe statico e usare quello.

return
02-06-2014, 17:05
Scusa, non ho capito :dh: puoi farmi un esempio?

oregon
02-06-2014, 17:23
Static Function Members

http://www.tutorialspoint.com/cplusplus/cpp_static_members.htm

return
02-06-2014, 21:46
Grazie, ma ho risolto con questo ;) :


auto Thread = std::async(&namepsace::Class::Thread, this, 0);

oregon
02-06-2014, 22:46
Questa un'altra storia ...

MItaly
03-06-2014, 00:15
Grazie, ma ho risolto con questo ;) :


auto Thread = std::async(&namepsace::Class::Thread, this, 0);

Occhio che (1) std::async non restituisce un thread, ma un std::future, e (2) se vuoi essere sicuro che venga effettivamente eseguito in un thread separato devi specificare il flag std::launch::async, altrimenti il runtime libero di tenerlo come "deferred" ed eseguirlo effettivamente solo quando vai a chiedere al future che hai ottenuto il risultato dell'operazione (cosa che il default di g++, per esempio).

In generale, la gestione "a future" nella mia esprienza una delle opzioni migliori per gestire operazioni parallele, ma un po' diversa rispetto ai thread "raw", ti consiglio di studiarteli per bene prima di usarli.

Loading