Oppure

Loading
19/07/06 19:25
Shutdown
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...

#include <iostream>
#include <windows.h>

using namespace std;

// Prototipi
bool createThread(void (*method)());
void metodo1();
void metodo2();

HANDLE Thrd;
DWORD dwThrdId, dwThrdPrm;

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

    // metodo2 thread
    createThread(metodo2);

    // termina senza errori
    return 0;
}

// Crea un nuovo Thread.
bool createThread(void (*method)())
{
    Thrd = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)method, 0, 0, &dwThrdId );
    if(Thrd) return true;
    else return false;
}

void metodo1()
{
    while( true )
        MessageBox( NULL, "", "", MB_OK );
}

void metodo2()
{
    while( true )
        MessageBox( NULL, "", "", MB_OK );
}
aaa
20/07/06 13:19
mar
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.

[url]
msdn.microsoft.com/library/…
[/url]

Ciao...
aaa
20/07/06 14:30
Shutdown
Mar, Grazie...

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

Grazie ancora e alla prossima.
aaa
20/07/06 15:32
mar
Ottima scelta...:k:

Ciao.
aaa
20/07/06 21:04
Shutdown
Già, hai proprio ragione...
DevCPP o altri non possono competere con la
completezza di questo IDE.
aaa