我在 Windows 上工作,我正在尝试学习管道,以及它们是如何工作的。
我还没有找到的一件事是如何判断管道上是否有新数据(来自管道的子/接收器端?
通常的方法是有一个线程读取数据,并将其发送到处理:
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();
}
}