Windows多线程示例代码

来源:互联网 发布:知乎android客户端 编辑:程序博客网 时间:2024/06/06 01:14
// thread.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <Windows.h>#include <vector>#include <iostream>#include <process.h>using namespace std;// 线程函数unsigned int __stdcall thread1(LPVOID arg);unsigned int __stdcall thread2(LPVOID arg);HANDLEgMutex;// 线程锁volatile boolgStop;// 结束状态vector<int>gVecNumbers;// 数组intgArgs;// 线程参数#define NUMBERS8int _tmain(int argc, _TCHAR* argv[]){gMutex = CreateMutex(NULL, FALSE, "ThreadMutex");// 创建互斥体gStop = false;HANDLE hThread = 0;unsigned int nThreadId = 0;vector<HANDLE> vecHandles;vector<unsigned (__stdcall*)(void *)> vecFuns;// 添加多个线程函数vecFuns.push_back(thread1);vecFuns.push_back(thread2);// 创建多个线程for (unsigned int i = 0; i < vecFuns.size(); i++){WaitForSingleObject(gMutex, INFINITE);hThread = (HANDLE)_beginthreadex(NULL, 0, vecFuns[i], (void*)&gArgs, CREATE_SUSPENDED, &nThreadId);ResumeThread(hThread);vecHandles.push_back(hThread);ReleaseMutex(gMutex);}// 等待线程结束for (unsigned int i = 0; i < vecHandles.size(); i++){WaitForSingleObject(vecHandles[i], INFINITE);}getchar();return 0;}unsigned int __stdcall thread1(LPVOID arg){// 线程1向vector里添加数据,添加完成后设置gStop为truefor (int i = 0; i < NUMBERS; i++){WaitForSingleObject(gMutex, INFINITE);gVecNumbers.push_back(i);cout << "thread 1 add " << i << endl;if (i == NUMBERS - 1)gStop = true;ReleaseMutex(gMutex);}return 0;}unsigned int __stdcall thread2(LPVOID arg){// 线程2从vector里删除数据while (!gStop){WaitForSingleObject(gMutex, INFINITE);if (gVecNumbers.size() > 0){cout << "thread 2 remove " << *gVecNumbers.begin() << endl;gVecNumbers.erase(gVecNumbers.begin());}ReleaseMutex(gMutex);}return 0;}

运行结果如图: