void CTestDlg::OnTimer(UINT nIDEvent)
{ if(nFlag != 1)
{
if (g_thFace != 0)
WaitForSingleObject(g_thFace->m_hThread, 2000);
else{} if (g_thCam != 0)
WaitForSingleObject(g_thCam->m_hThread, 2000);
else{}
g_thFace1=AfxBeginThread(threadFace1, this);
g_thCam1=AfxBeginThread(threadCam1, this);
nFlag = 1;
}
else if(nFlag == 1)
{
if (g_thFace1 != 0)
WaitForSingleObject(g_thFace1->m_hThread, 2000);
else{} if (g_thCam1 != 0)
WaitForSingleObject(g_thCam1->m_hThread, 2000);
else{}
g_thFace=AfxBeginThread(threadFace, this);
g_thCam=AfxBeginThread(threadCam, this); nFlag = 2;
} CDialog::OnTimer(nIDEvent);
}通过一个定时器来控制两组线程分别运行,以上写的有没有问题?WaitForSingleObject这个函数我看msdn帮助看的没怎么明白,是不是停止线程运行的函数?
等待的时间为第二个参数。
如果在这段时间内对象有信号,
WaitForSingleObject返回,
否则就阻塞在那里直到超时。
我是为了轮流执行两套线程,这样实现有什么问题吗?还有别的方法吗?
我不太明白你说的轮流执行是什么意思,你要是说你的4个线程依次轮流执行(也就是说不存在并发性)的话,这样写是不行的。需要用多线程互斥执行
可以将你的程序该为如下:
void CTestDlg::OnTimer(UINT nIDEvent)
{ if(nFlag != 1)
{
if (g_thFace != 0)
WaitForSingleObject(g_thFace->m_hThread, INFINITE);
else{} if (g_thCam != 0)
WaitForSingleObject(g_thCam->m_hThread, INFINITE);
else{}
g_thFace1=AfxBeginThread(threadFace1, this);
g_thCam1=AfxBeginThread(threadCam1, this);
nFlag = 1;
}
else if(nFlag == 1)
{
if (g_thFace1 != 0)
WaitForSingleObject(g_thFace1->m_hThread, INFINITE);
else{} if (g_thCam1 != 0)
WaitForSingleObject(g_thCam1->m_hThread, INFINITE)
else{}
g_thFace=AfxBeginThread(threadFace, this);
g_thCam=AfxBeginThread(threadCam, this); nFlag = 2;
} CDialog::OnTimer(nIDEvent);
}
WaitForSingleObject(g_thCam1->m_hThread, INFINITE)
那么下一套进程就永远不能进去了