Reactos
1#include <stdio.h>
2#include <windows.h>
3
4#define NR_THREADS (30)
5
6
7DWORD WINAPI
8thread_main1(LPVOID param)
9{
10 printf("Thread 1 running (Counter %lu)\n", PtrToUlong(param));
11 SleepEx(INFINITE, TRUE);
12 return 0;
13}
14
15
16DWORD WINAPI
17thread_main2(LPVOID param)
18{
19 printf("Thread 2 running (Counter %lu)\n", PtrToUlong(param));
20 Sleep(INFINITE);
21 return 0;
22}
23
24
25int main (void)
26{
27 DWORD i=0;
28 DWORD id;
29
30#if 1
31 printf("Creating %d threads...\n",NR_THREADS*2);
32 for (i=0;i<NR_THREADS;i++)
33 {
34 CreateThread(NULL,
35 0,
36 thread_main1,
37 (LPVOID)(ULONG_PTR)i,
38 0,
39 &id);
40
41/* CreateThread(NULL,
42 0,
43 thread_main2,
44 (LPVOID)i,
45 0,
46 &id);*/
47 }
48
49 printf("All threads created...\n");
50
51 /*
52 * Waiting for threads is not implemented yet.
53 * If you want to see all threads running, uncomment the
54 * call to SuspendThread(). The test application will
55 * freeze after all threads are created.
56 */
57/* SuspendThread (GetCurrentThread()); */
58
59#else
60
61 printf("Creating thread...\n");
62
63 hThread = CreateThread(NULL,
64 0,
65 thread_main1,
66 (LPVOID)i,
67 0,
68 &id);
69
70 printf("Thread created. Waiting for termination...\n");
71
72 WaitForSingleObject (hThread,
73 -1);
74
75 CloseHandle (hThread);
76
77 printf("Thread terminated...\n");
78#endif
79 printf("Exiting\n");
80 return 0;
81}