Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Gestire 3 Thread... strano...
Forum - C/C++ - Gestire 3 Thread... strano...

Avatar
Shutdown (Founder Member)
Guru


Messaggi: 1212
Iscritto: 10/09/2005

Segnala al moderatore
Postato alle 21:25
Mercoledì, 19/07/2006
Nel programma seguente ci sono tre thread...
ovvero il main thread, e due thread figli...
mi sono accorto che le operazioni dei due thread
figli non vengono eseguite perchè il main
thread termina prima che i due thread figli
abbiano finito...

Come posso risolvere a questo problema??

Inoltre mi piacerebbe sapere come posso mettere
in PAUSA un thread e come TERMINARLO...

Grazie 1000 a tutti... molto gentili...

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. using namespace std;
  5.  
  6. // Prototipi
  7. bool createThread(void (*method)());
  8. void metodo1();
  9. void metodo2();
  10.  
  11. HANDLE Thrd;
  12. DWORD dwThrdId, dwThrdPrm;
  13.  
  14. // entry point del programma.
  15. int main( int argc, char* argv[] )
  16. {
  17.     // metodo1 thread
  18.     createThread(metodo1);
  19.  
  20.     // metodo2 thread
  21.     createThread(metodo2);
  22.  
  23.     // termina senza errori
  24.     return 0;
  25. }
  26.  
  27. // Crea un nuovo Thread.
  28. bool createThread(void (*method)())
  29. {
  30.     Thrd = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)method, 0, 0, &dwThrdId );
  31.     if(Thrd) return true;
  32.     else return false;
  33. }
  34.  
  35. void metodo1()
  36. {
  37.     while( true )
  38.         MessageBox( NULL, "", "", MB_OK );
  39. }
  40.  
  41. void metodo2()
  42. {
  43.     while( true )
  44.         MessageBox( NULL, "", "", MB_OK );
  45. }


PM Quote
Avatar
mar (Normal User)
Rookie


Messaggi: 28
Iscritto: 29/06/2006

Segnala al moderatore
Postato alle 15:19
Giovedì, 20/07/2006
Ciao,
Quando un processo termina automaticamente vengono terminati tutti i suoi thread. Per ovviare a questo problema il tuo main thread deve ovviamente ricevere un input dall'utente per terminare. Ci sono vari e diversi modi per far ciò, tutto dipende dal tipo e dallo scopo del programma che si vuole realizzare. Ad esempio puoi decidere di terminare il processo quando viene premuta una combinazione di tasti tipo Ctrl+X:

// entry point del programma.
int main( int argc, char* argv[] )
{

// metodo1 thread
createThread(metodo1);

// metodo2 thread
createThread(metodo2);

while(1){
if(GetAsyncKeyState(VK_LCONTROL))
  if(GetAsyncKeyState('X'))
     break;
Sleep(150);
}
// per correttezza dv chiudere i thread ed uscire
// termina senza errori
return 0;
}

Per quanto invece riguarda la terminazione, la sospensione e la ripresa di uno specifico thread ci sono le apposite API, TerminateThread, SuspendThread, ResumeThread.


http://msdn.microsoft.com/library/default.asp?url=/library ...


Ciao...

PM Quote
Avatar
Shutdown (Founder Member)
Guru


Messaggi: 1212
Iscritto: 10/09/2005

Segnala al moderatore
Postato alle 16:30
Giovedì, 20/07/2006
Mar, Grazie...

Installerò Microsoft Visual C++...
Credo sia l'IDE migliore per programmare
sfruttando le Win32 API...

Grazie ancora e alla prossima.

PM Quote
Avatar
mar (Normal User)
Rookie


Messaggi: 28
Iscritto: 29/06/2006

Segnala al moderatore
Postato alle 17:32
Giovedì, 20/07/2006
Ottima scelta...:k:

Ciao.

PM Quote
Avatar
Shutdown (Founder Member)
Guru


Messaggi: 1212
Iscritto: 10/09/2005

Segnala al moderatore
Postato alle 23:04
Giovedì, 20/07/2006
Già, hai proprio ragione...
DevCPP o altri non possono competere con la
completezza di questo IDE.

PM Quote