Klein の C++ 用シリアル ライブラリの例を理解するのに苦労しています。このページの中ほどに、「Win32 同期オブジェクトの使用」というセクションがありますが、これを理解するのに苦労しています。 http://www.codeproject.com/Articles/992/Serial-library-for-C
// 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
...
}
その呼び出しから WaitEvent が実行するものは次のとおりです(すべてのチェックなどはありません):
// Wait for the COM event
::WaitCommEvent(m_hFile,LPDWORD(&m_eEvent),lpOverlapped);
::SetEvent(lpOverlapped->hEvent);
2 つの質問: 1) シリアル クラスの WaitEvent メソッドと、その直後に Windows API の WaitForMultipleObjects の両方を使用するのはなぜですか? どちらも同じことをしているように見えます: COM ポートで何かが起こるのを待ちます。2) Stop イベントはどのように通知されますか? WaitForMultipleObjects は名前か何かでそれを認識しますか?