C++;串行库';Win32同步功能的使用? 我理解了克莱因的C++系列库的一个例子。大约在本页的一半,有一个部分叫做“Win32同步对象的使用”,我在后面遇到了一些问题。
下面是WaitEvent从该调用执行的内容(不包含所有检查和内容): 两个问题: 1) 为什么他同时使用serial类中的WaitEvent方法和Windows API中的WaitForMultipleObject?它们似乎都在做相同的事情:等待COM端口发生某些事情。C++;串行库';Win32同步功能的使用? 我理解了克莱因的C++系列库的一个例子。大约在本页的一半,有一个部分叫做“Win32同步对象的使用”,我在后面遇到了一些问题。 ,c++,winapi,serial-communication,overlapped-io,C++,Winapi,Serial Communication,Overlapped Io,下面是WaitEvent从该调用执行的内容(不包含所有检查和内容): 两个问题: 1) 为什么他同时使用serial类中的WaitEvent方法和Windows API中的WaitForMultipleObject?它们似乎都在做相同的事情:等待COM端口发生某些事情。 2) 如何发出停止事件的信号?WaitForMultipleObjects是否通过名称或其他方式识别它?此代码使用重叠I/O,这是异步函数的一种形式,因此对WaitCommEvent()的调用实际上并不等待串行事件发生,而是在感
2) 如何发出停止事件的信号?WaitForMultipleObjects是否通过名称或其他方式识别它?此代码使用重叠I/O,这是异步函数的一种形式,因此对
WaitCommEvent()
的调用实际上并不等待串行事件发生,而是在感兴趣的事件发生时向给定的事件对象发送信号
WaitForMultipleObjects
将等待两个给定事件对象中的任何一个发出信号:
WaitCommEvent()
检测到有趣的内容时,将设置第一个// Create a handle for the overlapped operations
HANDLE hevtOverlapped = ::CreateEvent(0,TRUE,FALSE,0);;
// Open the "STOP" handle
HANDLE hevtStop = ::CreateEvent(0,TRUE,FALSE,_T("Overlapped_Stop_Event"));
// Setup the overlapped structure
OVERLAPPED ov = {0};
ov.hEvent = hevtOverlapped;
// Wait for an event
serial.WaitEvent(&ov);
// Setup array of handles in which we are interested
HANDLE ahWait[2];
ahWait[0] = hevtOverlapped;
ahWait[1] = hevtStop;
// Wait until something happens
switch (::WaitForMultipleObjects(2,ahWait,FALSE,INFINITE))
{
case WAIT_OBJECT_0:
// Serial port event occurred
...
case WAIT_OBJECT_0+1:
// Stop event raised
...
}
// Wait for the COM event
::WaitCommEvent(m_hFile,LPDWORD(&m_eEvent),lpOverlapped);
::SetEvent(lpOverlapped->hEvent);