#include #include HANDLE eventKill; HANDLE eventExitThread; HANDLE captureThread; class TProcessThread { public: int i; TProcessThread() { i = 0; } void Process(void) { printf("contador da thread01: %d\n",i++); } }; class TProcessThread2 { public: int i; TProcessThread2() { i = 0; } void Process(void) { printf("contador da thread02: %d\n",i++); } }; DWORD WINAPI captureThreadProc(LPVOID lpvoid) { TProcessThread *pf = (TProcessThread*)lpvoid; while (WaitForSingleObject(eventKill, 0) == WAIT_TIMEOUT) { pf->Process(); } SetEvent(eventExitThread); ExitThread(0); return 0; } DWORD WINAPI captureThreadProc2(LPVOID lpvoid) { TProcessThread2 *pf = (TProcessThread2*)lpvoid; while (WaitForSingleObject(eventKill, 0) == WAIT_TIMEOUT) { pf->Process(); } SetEvent(eventExitThread); ExitThread(0); return 0; } int main(int argc, char *argv[]) { TProcessThread *pt; pt = new TProcessThread(); int x; eventKill = CreateEvent(NULL, TRUE, TRUE, NULL); ResetEvent(eventKill); eventExitThread = CreateEvent(NULL, TRUE, TRUE, NULL); ResetEvent(eventExitThread); //captura da execução da thread 01 captureThread= CreateThread(0, 0, captureThreadProc, (LPVOID)pt, CREATE_SUSPENDED, NULL); ResumeThread(captureThread); //captura da execução da thread 02 captureThread= CreateThread(0, 0, captureThreadProc2, (LPVOID)pt, CREATE_SUSPENDED, NULL); ResumeThread(captureThread); for(x=0; x<=100; x++) { printf("contador do programa principal : %d\n",x); } SetEvent(eventKill); system("PAUSE"); WaitForSingleObject(eventExitThread, INFINITE); return 0; }