kinect学习笔记五(线程并发)

因为想同时处理左右手,想采用线程并发来同时处理,提高处理速度,找了些材料,贴到这里以供以后使用

#include <windows.h>
#include <iostream>

using namespace std;

DWORD WINAPI processRightHand(LPVOID param); //右手处理线程
DWORD WINAPI processLeftHand(LPVOID param);//左手处理线程

int main()
{
	HANDLE hand1 = CreateThread(NULL, 0, processRightHand, 0, CREATE_SUSPENDED, NULL);//创建线程并挂起
	HANDLE hand2 = CreateThread(NULL, 0, processLeftHand, 0, CREATE_SUSPENDED, NULL);

	ResumeThread(hand1);//激活线程
	ResumeThread(hand2);

	if((WaitForSingleObject(hand1, INFINITE)==WAIT_OBJECT_0 ) && (WaitForSingleObject(hand2, INFINITE)==WAIT_OBJECT_0 ))//等待线程结束
	{
		cout << "执行完毕" << endl;
	}

	cout << "ok" << endl;
	int w;
	cin>>w;
	return 0;
}

DWORD WINAPI processRightHand(LPVOID param)
{
	cout << "no1" << endl;
	Sleep(1000);
	cout << "no1over" << endl;
	return 0;
}
DWORD WINAPI processLeftHand(LPVOID param)
{
	cout << "no2" << endl;
	Sleep(5000);
	cout << "no2over" << endl;
	return 0;
}


函数WaitForSingleObject是对事件进行跟踪,使自身线程阻塞 ,知道调用的线程达到条件返回以后自身才继续向下运行。

如上面代码表示等待hand1和hand2两个线程都运行完成才返回,要不然main的线程继续阻塞。

函数返回值有好多,一开始以为是正确返回就是1拉倒的。具体见下面资料

WAIT_ABANDONED 0x00000080:当hHandle为mutex时,如果拥有mutex的线程在结束时没有释放核心对象会引发此返回值。
WAIT_OBJECT_0 0x00000000 :核心对象已被激活
WAIT_TIMEOUT 0x00000102:等待超时
WAIT_FAILED 0xFFFFFFFF :出现错误,可通过GetLastError得到错误代码


你可能感兴趣的:(object,null,winapi)