シリアル ポートでオーバーラップ I/O を実行するプログラムを使用していますが、受信したデータがアプリケーションによって読み取られない場合があります。私のコードはSetCommMask()
andWaitCommEvent()
を次のように使用しています:
if(!waiting_for_comm_event)
{
comm_event_ready = false;
if(!SetCommMask(port_handle, EV_RXCHAR | EV_ERR | EV_RLSD))
throw OsException(my_strings[strid_set_comm_mask_failed].c_str());
rcd = WaitCommEvent(port_handle, &event_mask, &event_control);
last_error = GetLastError();
if(rcd && event_mask != 0)
comm_event_ready = true;
else if(last_error != ERROR_IO_PENDING)
throw OsException(my_strings[strid_wait_comm_event_failed].c_str());
else
waiting_for_comm_event = true;
}
このコードは、出力バッファーにデータを書き込んだ後に呼び出されます。この書き込み中にデータを受信する可能性があります。WaitCommEvent()
読み取り待ちのデータが既に存在する状態を報告しますか?