看到多线程的其他博客,在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);