串口 WaitForMultipleObjects函数解释及其用法
2013-07-29 17:18
351 查看
转载自:http://hi.baidu.com/vtotrktzypbcdoq/item/f7ef8f1f173b5adfbe9042f2
函数原型:DWORD WaitForMultipleObjects(
DWORD nCount,
// number of handles in array
CONST HANDLE *lpHandles,
// object-handle array
BOOL bWaitAll,
// wait option
DWORD dwMilliseconds //
time-out interval
);
WaitForMultipleObjects函数用于等待多个内核对象,前两个参数分别为要等待的内核对象的个数和句柄数组指针。如果将第三个参数bWaitAll的值设为TRUE,等待的内核对象全部变成受信状态以后此函数才返回。否则,bWaitAll为0的话,只要等待的内核对象中有一个变成了受信状态,WaitForMultipleObjects就返回,返回值指明了是哪一个内核对象变成了受信状态。
实例一:
下面的代码说明了函数返回值的作用:
HANDLE h[2];
h[0] = hThread1;
h[1] = hThread2;
DWORD dw = ::WaitForMultipleObjects(2, h, FALSE, 5000);
switch(dw)
{ case WAIT_FAILED:
// 调用WaitForMultipleObjects函数失败(句柄无效?)
break;
case WAIT_TIMEOUT:
// 在5秒内没有一个内核对象受信
break;
case WAIT_OBJECT_0 + 0:
// 句柄h[0]对应的内核对象受信
break;
case WAIT_OBJECT_0 + 1:
// 句柄h[1]对应的内核对象受信
break;
}
参数bWaitAll为FALSE的时候,WaitForMultipleObjects函数从索引0开始扫描整个句柄数组,第一个受信的内核对象将终止函数的等待,使函数返回。
实例二:
for(int i=0;i<6;i++)
{
for(int j=0;j<10;j++)
{
theport[j].rmt_host=rmt_host;
theport[j].p=port[i*10+j];
theport[j].n=j;
Thread[j]=AfxBeginThread(pScan,(LPVOID)&theport[j]);
hThread[j]=Thread[j]->m_hThread;
Sleep(1);
}
WaitForMultipleObjects(10,hThread,TRUE,120000);
}
注:线程退出后,即线程对象计数值变为0后,线程才会变为受信状态。
函数原型:DWORD WaitForMultipleObjects(
DWORD nCount,
// number of handles in array
CONST HANDLE *lpHandles,
// object-handle array
BOOL bWaitAll,
// wait option
DWORD dwMilliseconds //
time-out interval
);
WaitForMultipleObjects函数用于等待多个内核对象,前两个参数分别为要等待的内核对象的个数和句柄数组指针。如果将第三个参数bWaitAll的值设为TRUE,等待的内核对象全部变成受信状态以后此函数才返回。否则,bWaitAll为0的话,只要等待的内核对象中有一个变成了受信状态,WaitForMultipleObjects就返回,返回值指明了是哪一个内核对象变成了受信状态。
实例一:
下面的代码说明了函数返回值的作用:
HANDLE h[2];
h[0] = hThread1;
h[1] = hThread2;
DWORD dw = ::WaitForMultipleObjects(2, h, FALSE, 5000);
switch(dw)
{ case WAIT_FAILED:
// 调用WaitForMultipleObjects函数失败(句柄无效?)
break;
case WAIT_TIMEOUT:
// 在5秒内没有一个内核对象受信
break;
case WAIT_OBJECT_0 + 0:
// 句柄h[0]对应的内核对象受信
break;
case WAIT_OBJECT_0 + 1:
// 句柄h[1]对应的内核对象受信
break;
}
参数bWaitAll为FALSE的时候,WaitForMultipleObjects函数从索引0开始扫描整个句柄数组,第一个受信的内核对象将终止函数的等待,使函数返回。
实例二:
for(int i=0;i<6;i++)
{
for(int j=0;j<10;j++)
{
theport[j].rmt_host=rmt_host;
theport[j].p=port[i*10+j];
theport[j].n=j;
Thread[j]=AfxBeginThread(pScan,(LPVOID)&theport[j]);
hThread[j]=Thread[j]->m_hThread;
Sleep(1);
}
WaitForMultipleObjects(10,hThread,TRUE,120000);
}
注:线程退出后,即线程对象计数值变为0后,线程才会变为受信状态。
相关文章推荐
- 串口 WaitForSingleObject 和 WaitForMultipleObjects函数
- VC++ WaitForMultipleObjects函数用法
- 串口之WaitForSingleObjec、WaitForMultipleObjects函数详解
- 串口之WaitForSingleObjec、WaitForMultipleObjects函数详解
- VC++ WaitCommEvent、GetLastError、ClearCommError、WaitForMultipleObjects用法
- WaitForSingleObject或MsgWaitForMultipleObjects函数无返回,程序直接退出问题
- 函数WaitForMultipleObjects整理
- WaitForSingleObject或MsgWaitForMultipleObjects函数无返回,程序直接退出问题
- WaitForMultipleObjects用法详解,一看就懂
- WaitForMultipleObjects用法详解,一看就懂
- WaitForMultipleObjects用法探索
- WaitForMultipleObjects用法探索
- WaitForMultipleObjects用法探索
- 函数WaitForMultipleObjects整理
- WaitForSingleObject和WaitForMultipleObjects用法
- 用ACE的Reactor模式实现网络通讯时,ACE内部用WSAEventSelect函数把网络事件与一个事件对象关联起来,目的是为了后面用WaitForMultipleObjects函数统一处理。
- 函数WaitForMultipleObjects整理
- 线程函数的设计以及线程同步要点(MsgWaitForMultipleObjects等)
- 函数WaitForMultipleObjects整理
- WaitForMultipleObject与MsgWaitForMultipleObjects用法