windows多线程

来源:互联网 发布:unity3d开发的游戏案例 编辑:程序博客网 时间:2024/04/30 07:19

//创建多子个线程实例#include <stdio.h>#include <process.h>#include <windows.h>//子线程函数unsigned int __stdcall ThreadFun(PVOID pM){printf("线程ID号为%4d的子线程说:Hello World\n", GetCurrentThreadId());return 0;}//主函数,所谓主函数其实就是主线程执行的函数。int main(){printf("     创建多个子线程实例 \n");const int THREAD_NUM = 5;HANDLE handle[THREAD_NUM];for (int i = 0; i < THREAD_NUM; i++)handle[i] = (HANDLE)_beginthreadex(NULL, 0, ThreadFun, NULL, 0, NULL);WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);return 0;}

#include <stdio.h>#include <windows.h>#include <process.h>// using namespace std;long g_nNum;const int THREAD_NUM = 10;//关键段变量声明CRITICAL_SECTION  g_csThreadParameter, g_csThreadCode; DWORD WINAPI Fun(LPVOID *pPM){int nThreadNum = *(int *)pPM; EnterCriticalSection(&g_csThreadCode);//进入各子线程互斥区域g_nNum++;Sleep(50);//some work should to doprintf("thread num:%d  g:%d\n", nThreadNum, g_nNum);LeaveCriticalSection(&g_csThreadCode);//离开各子线程互斥区域return 0;}int main(){printf("     经典线程同步 关键段\n");//关键段初始化InitializeCriticalSection(&g_csThreadParameter);InitializeCriticalSection(&g_csThreadCode);HANDLE  handle[THREAD_NUM];g_nNum = 0;int i = 0;while (i < THREAD_NUM) {handle[i] = (HANDLE)CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Fun, (LPVOID)&i, 0, NULL);EnterCriticalSection(&g_csThreadParameter);//进入子线程序号关键区域++i;LeaveCriticalSection(&g_csThreadParameter);//离开子线程序号关键区域}WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);DeleteCriticalSection(&g_csThreadCode);DeleteCriticalSection(&g_csThreadParameter);return 0;}

#include <stdio.h>#include <process.h>#include <windows.h>long g_nNum;unsigned int __stdcall Fun(void *pPM);const int THREAD_NUM = 10;//事件与关键段HANDLE  g_hThreadEvent;CRITICAL_SECTION g_csThreadCode;int main(){printf("     经典线程同步 事件Event\n");//初始化事件和关键段 自动置位,初始无触发的匿名事件g_hThreadEvent = CreateEvent(NULL, FALSE, FALSE, NULL); InitializeCriticalSection(&g_csThreadCode);HANDLE  handle[THREAD_NUM];g_nNum = 0;int i = 0;while (i < THREAD_NUM) {handle[i] = (HANDLE)_beginthreadex(NULL, 0, Fun, &i, 0, NULL);WaitForSingleObject(g_hThreadEvent, INFINITE); //等待事件被触发i++;}WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);//销毁事件和关键段CloseHandle(g_hThreadEvent);DeleteCriticalSection(&g_csThreadCode);return 0;}unsigned int __stdcall Fun(void *pPM){int nThreadNum = *(int *)pPM; SetEvent(g_hThreadEvent); //触发事件Sleep(50);//some work should to doEnterCriticalSection(&g_csThreadCode);g_nNum++;Sleep(0);//some work should to doprintf("线程编号为%d  全局资源值为%d\n", nThreadNum, g_nNum); LeaveCriticalSection(&g_csThreadCode);return 0;}



#include <stdio.h>#include <process.h>#include <windows.h>long g_nNum;unsigned int __stdcall Fun(void *pPM);const int THREAD_NUM = 10;//事件与关键段HANDLE  g_hThreadEvent;CRITICAL_SECTION g_csThreadCode;int main(){printf("     经典线程同步 事件Event\n");printf(" -- by MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");//初始化事件和关键段 自动置位,初始无触发的匿名事件g_hThreadEvent = CreateEvent(NULL, FALSE, FALSE, NULL); InitializeCriticalSection(&g_csThreadCode);HANDLE  handle[THREAD_NUM];g_nNum = 0;int i = 0;while (i < THREAD_NUM) {handle[i] = (HANDLE)_beginthreadex(NULL, 0, Fun, &i, 0, NULL);WaitForSingleObject(g_hThreadEvent, INFINITE); //等待事件被触发i++;}WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);//销毁事件和关键段CloseHandle(g_hThreadEvent);DeleteCriticalSection(&g_csThreadCode);return 0;}unsigned int __stdcall Fun(void *pPM){int nThreadNum = *(int *)pPM; SetEvent(g_hThreadEvent); //触发事件Sleep(50);//some work should to doEnterCriticalSection(&g_csThreadCode);g_nNum++;Sleep(0);//some work should to doprintf("线程编号为%d  全局资源值为%d\n", nThreadNum, g_nNum); LeaveCriticalSection(&g_csThreadCode);return 0;}



原创粉丝点击