2004-10-21 05:12:02 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <windows.h>
|
|
|
|
|
|
|
|
#define NR_THREADS (30)
|
|
|
|
|
|
|
|
|
|
|
|
DWORD WINAPI
|
|
|
|
thread_main1(LPVOID param)
|
|
|
|
{
|
|
|
|
printf("Thread 1 running (Counter %lu)\n", (DWORD)param);
|
|
|
|
SleepEx(INFINITE, TRUE);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DWORD WINAPI
|
|
|
|
thread_main2(LPVOID param)
|
|
|
|
{
|
|
|
|
printf("Thread 2 running (Counter %lu)\n", (DWORD)param);
|
|
|
|
Sleep(INFINITE);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int main (void)
|
|
|
|
{
|
|
|
|
DWORD i=0;
|
|
|
|
DWORD id;
|
|
|
|
|
|
|
|
#if 1
|
|
|
|
printf("Creating %d threads...\n",NR_THREADS*2);
|
|
|
|
for (i=0;i<NR_THREADS;i++)
|
|
|
|
{
|
|
|
|
CreateThread(NULL,
|
|
|
|
0,
|
|
|
|
thread_main1,
|
|
|
|
(LPVOID)i,
|
|
|
|
0,
|
|
|
|
&id);
|
|
|
|
|
|
|
|
/* CreateThread(NULL,
|
|
|
|
0,
|
|
|
|
thread_main2,
|
|
|
|
(LPVOID)i,
|
|
|
|
0,
|
|
|
|
&id);*/
|
|
|
|
}
|
|
|
|
|
|
|
|
printf("All threads created...\n");
|
2005-05-07 21:24:31 +00:00
|
|
|
|
2004-10-21 05:12:02 +00:00
|
|
|
/*
|
|
|
|
* Waiting for threads is not implemented yet.
|
|
|
|
* If you want to see all threads running, uncomment the
|
|
|
|
* call to SuspendThread(). The test application will
|
|
|
|
* freeze after all threads are created.
|
|
|
|
*/
|
|
|
|
/* SuspendThread (GetCurrentThread()); */
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
printf("Creating thread...\n");
|
|
|
|
|
|
|
|
hThread = CreateThread(NULL,
|
|
|
|
0,
|
|
|
|
thread_main1,
|
|
|
|
(LPVOID)i,
|
|
|
|
0,
|
|
|
|
&id);
|
|
|
|
|
|
|
|
printf("Thread created. Waiting for termination...\n");
|
|
|
|
|
|
|
|
WaitForSingleObject (hThread,
|
|
|
|
-1);
|
|
|
|
|
|
|
|
CloseHandle (hThread);
|
|
|
|
|
|
|
|
printf("Thread terminated...\n");
|
|
|
|
#endif
|
|
|
|
printf("Exiting\n");
|
|
|
|
return 0;
|
|
|
|
}
|