gpt4 book ai didi

c++ - 如何判断管道上是否有新数据?

转载 作者:行者123 更新时间:2023-11-30 01:25:57 26 4
gpt4 key购买 nike

我在 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();
}
}

最佳答案

使用PeekNamedPipe() :

DWORD total_available_bytes;
if (FALSE == PeekNamedPipe(pipe_handle,
0,
0,
0,
&total_available_bytes,
0))
{
// Handle failure.
}
else if (total_available_bytes > 0)
{
// Read data from pipe ...
}

关于c++ - 如何判断管道上是否有新数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11396870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com