私は Windows で作業しており、パイプとその仕組みを学ぼうとしています。
私が見つけていないことの1つは、パイプに新しいデータがあるかどうかをどのように確認できるかです(パイプの子/受信側から?
通常の方法は、データを読み取り、処理のために送信するスレッドを用意することです。
void GetDataThread()
{
while(notDone)
{
BOOL result = ReadFile (pipe_handle, buffer, buffer_size, &bytes_read, NULL);
if (result) DoSomethingWithTheData(buffer, bytes_read);
else Fail();
}
}
問題は、ReadFile() 関数がデータを待ってから読み取ることです。次のように、実際に新しいデータを待たずに、新しいデータがあるかどうかを伝える方法はありますか?
void GetDataThread()
{
while(notDone)
{
BOOL result = IsThereNewData (pipe_handle);
if (result) {
result = ReadFile (pipe_handle, buffer, buffer_size, &bytes_read, NULL);
if (result) DoSomethingWithTheData(buffer, bytes_read);
else Fail();
}
DoSomethingInterestingInsteadOfHangingTheThreadSinceWeHaveLimitedNumberOfThreads();
}
}