多线程交叉运行思考
1 // ThreadPrintOddEven.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 2 // 3 4 #include "pch.h" 5 #include <iostream> 6 #include <Windows.h> 7 #include <time.h> 8 #include <stdlib.h> 9 #include <process.h> 10 11 12 13 14 int g_number = 0; 15 HANDLE g_hEvent = NULL; 16 BOOL g_isFirst = true; 17 18 unsigned int __stdcall threadFun1(void *param) 19 { 20 printf("Enter %s\n", __FUNCTION__); 21 22 while (1) 23 { 24 if (g_isFirst) 25 { 26 SetEvent(g_hEvent); 27 g_isFirst = false; 28 } 29 DWORD dwWaitResult = WaitForSingleObject(g_hEvent, INFINITE); 30 31 switch (dwWaitResult) 32 { 33 // Event object was signaled 34 case WAIT_OBJECT_0: 35 break; 36 // An error occurred 37 default: 38 printf("Wait error (%d)\n", GetLastError()); 39 return 0; 40 } 41 42 ResetEvent(g_hEvent); 43 44 printf("threadFun1: AAAAAAAAAAAAAAAAAAAA\t\r\n"); 45 Sleep(850); 46 47 SetEvent(g_hEvent); 48 } 49 50 return 0; 51 } 52 53 unsigned int __stdcall threadFun2(void *param) 54 { 55 printf("Enter %s\n", __FUNCTION__); 56 57 while (1) 58 { 59 DWORD dwWaitResult = WaitForSingleObject(g_hEvent, INFINITE); 60 61 switch (dwWaitResult) 62 { 63 // Event object was signaled 64 case WAIT_OBJECT_0: 65 break; 66 // An error occurred 67 default: 68 printf("Wait error (%d)\n", GetLastError()); 69 return 0; 70 } 71 72 ResetEvent(g_hEvent); 73 74 printf("threadFun2: BBBBBBBBBBBBBBBBBBBB\t\r\n"); 75 Sleep(400); 76 77 SetEvent(g_hEvent); 78 //Sleep(800); 79 80 } 81 82 return 0; 83 } 84 85 unsigned int __stdcall threadFun3(void *param) 86 { 87 printf("Enter %s\n", __FUNCTION__); 88 89 while (1) 90 { 91 DWORD dwWaitResult = WaitForSingleObject(g_hEvent, INFINITE); 92 93 switch (dwWaitResult) 94 { 95 // Event object was signaled 96 case WAIT_OBJECT_0: 97 break; 98 // An error occurred 99 default: 100 printf("Wait error (%d)\n", GetLastError()); 101 return 0; 102 } 103 104 ResetEvent(g_hEvent); 105 printf("threadFun3: CCCCCCCCCCCCCCCCCCCC\t\r\n"); 106 Sleep(600); 107 108 SetEvent(g_hEvent); 109 //Sleep(800); 110 } 111 112 return 0; 113 } 114 115 int main(int argc, char* argv[]) 116 { 117 g_hEvent = CreateEvent(NULL, false, 0, L"Event Test1"); 118 119 HANDLE hThread1 = NULL; 120 unsigned threadID1 = 0; 121 122 hThread1 = (HANDLE)_beginthreadex(NULL, 0, threadFun1, NULL, 0, &threadID1); 123 124 HANDLE hThread2 = NULL; 125 unsigned threadID2 = 0; 126 127 hThread2 = (HANDLE)_beginthreadex(NULL, 0, threadFun2, NULL, 0, &threadID2); 128 129 HANDLE hThread3 = NULL; 130 unsigned threadID3 = 0; 131 132 hThread3 = (HANDLE)_beginthreadex(NULL, 0, threadFun3, NULL, 0, &threadID3); 133 134 SetThreadPriority(hThread1, THREAD_PRIORITY_ABOVE_NORMAL); 135 SetThreadPriority(hThread2, THREAD_PRIORITY_BELOW_NORMAL); 136 137 while (1); 138 139 return 0; 140 }