Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    23

    [C++] Passare oggetti ai thread

    Salve!

    Ho bisogno di sapere come utilizzare un oggetto in un thread. Mi spiego:
    Diciamo che ho la classe A e creo un oggetto, diciamo B, di queta classe.
    Quando creo un thread voglio poter usare l'oggetto B all'interno del thread.
    Come faccio?

    Il programma è del tipo:



    #include <process.h>

    void ThProva(void* ????DEVO PASSARE B?????){
    ...
    ...
    B.FUNZIONE(PARAMETRI);
    ...
    ...
    _endthread();
    }

    int main(int argc,char* argv[]){
    ...
    ...
    A B();
    B.FUNZIONE(PARAMETRI);
    ...
    ...
    _beginthread(ThProva,0,(void*)?????DEVO PASSARE B????????);
    ...
    ...
    }



    Qualcuno sa aiutarmi?

    Grazie!!

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Si, devi passare B. E' il modo in cui lo fai non va bene.
    Questo è classico pezzo di codice che in genere viene usato.

    Nota che il parametro da passare alla ThreadProc DEVE essere allocato sull'heap e non posto sullo stack per garantire il corretto lifetime di B.
    Nota poi che utilizzo la _beginthreadex e non la _beginthread e non utizzo una _endthreadex dal momento che il thread termina da solo e forzarne l'uscita è sconsigliato.
    Ma queste sono scelte di design mie.

    codice:
    class MainThread {
    	public:
    		virtual unsigned run()=0;
    		virtual ~MainThread() {}
    };
    
    class B : public MainThread {
    	public:
    		unsigned run() { ... }
    		// lista parametri
    
    };
    
    
    unsigned ThreadProc(void* param) {
    	MainThread* p = static_cast<MainThread>(param);
    	return p->run();
    }
    
    
    int main ( ... ) {
    
    	B* obj = new B;
    	HANDLE h = reinterpret_cast<HANDLE>(_beginthreadex(NULL,0,ThreadProc,obj ,0,&m_id));
    	
    	WaitForSingleObject(h,INFINITE);
    	delete obj;
    
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    23
    Grazie 1000!

    Ora funziona!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.