版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cuixing001/article/details/82856681
C++多线程编程有多种方法,传统方法稍微繁琐,不易理解,现给出一demo示例,说明执行同一任务达到并行执行的效果,从而提高程序效率。
#include <iostream>
#include <Windows.h>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
HANDLE hObject;
// 传递线程参数的结构体
typedef struct threadParams
{
int a;
int b;
}threadParams;
DWORD WINAPI Fun(LPVOID lps)//创建多线程函数,函数返回值为DWORD WINAPI,一定要是这个,否则会出错
{
threadParams *mydata = (threadParams*)lps;
while (true)
{
Sleep(2000);
WaitForSingleObject(hObject, INFINITE);//获取等待资源,一直等待,知道获取"screen"资源后,才返回
cout << mydata->a << "," << mydata->b << endl;
//cout << "支线程1" << endl;
SetEvent(hObject);
}
}
DWORD WINAPI Fun1(LPVOID lps)
{
threadParams *mydata = (threadParams*)lps;
while (true)
{
WaitForSingleObject(hObject, INFINITE);//获取等待资源,一直等待,直到有信号后,才执行下面语句
//cout << "支线程1" << endl;
cout << mydata->a << "," << mydata->b << endl;
//Sleep(2000);
SetEvent(hObject);
}
}
DWORD WINAPI Fun2(LPVOID lps)
{
threadParams *mydata = (threadParams*)lps;
while (true)
{
WaitForSingleObject(hObject, INFINITE);//获取等待资源,一直等待,直到有信号后,才执行下面语句
//cout << "支线程1" << endl;
cout << mydata->a << "," << mydata->b << endl;
//Sleep(2000);
SetEvent(hObject);
}
}
int main()
{
threadParams parms[3] = {1,2,3,4,5,6};
HANDLE handle1 = CreateThread(NULL, 0, Fun, &parms[0], 0, NULL);//创建多线程
HANDLE handle2 = CreateThread(NULL, 0, Fun, &parms[1], 0, NULL);//创建多线程
HANDLE handle3 = CreateThread(NULL, 0, Fun, &parms[2], 0, NULL);//创建多线程
HANDLE handales[3] = { handle1,handle2,handle3 };
hObject = CreateEvent(NULL, false, false, NULL);
SetEvent(hObject);
CloseHandle(handle1);//释放线程
CloseHandle(handle2);//释放线程
CloseHandle(handle3);//释放线程
while (true)
{
double time1 = getTickCount();
WaitForSingleObject(hObject, INFINITE);//获取等待资源,一直等待,知道获取"screen"资源后,才返回
Sleep(500);
cout << "主线程1" << endl;
printf("take time(ms)%.2f\n", (getTickCount() - time1) / getTickFrequency() * 1000);
SetEvent(hObject);
}
CloseHandle(hObject);
return 0;
}
可以看出,三个“任务”是同时隔2000ms同步一次。
Reference
https ://blog.csdn.net/naibozhuan3744/article/details/78746292?utm_source=copy