c++ 多线程

看到多线程的其他博客,在c++中推荐使用_beginthreadex而不是createThread创建线程。

_beginthreadex()是C运行库函数,CreateThread()是windows API。CreateThread在关闭时需要CloseHandle,容易造成内存泄漏等……

1.通过_beginthreadex()创建多线程

1 1 unsigned threadid; //返回线程ID
2 2 HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, ThreadProc, (LPVOID)&imgMat, 0, &threadid);  //传递参数Mat类型的引用转换为void*
1 WaitForSingleObject(hThread, INFINITE);    //等待子线程返回后主线程再继续执行
2 CloseHandle(hThread); //关闭线程句柄

2.线程函数

unsigned int __stdcall ThreadProc(LPVOID lpParameter)
{
    using namespace cv; //引用opencv命名空间
    Mat* imgptr=(Mat*)lpParameter; //转换为指向Mat类型的指针变量
    Mat imgMat = *(Mat*)lpParameter; //转换为Mat类型变量
    return 0;  
}

3.中止、挂起、恢复线程

1     TerminateThread(threadid);
2     SuspendThread(threadid);
3     ResumeThread(threadid);
原文地址:https://www.cnblogs.com/sclu/p/12177310.html