gpt4 book ai didi

c++ - 功能工作定时器

转载 作者:行者123 更新时间:2023-11-28 00:56:44 24 4
gpt4 key购买 nike

我有一个从套接字接收数据的函数,我需要在 5 秒过去后停止函数而不创建额外的线程。我的代码:

void TestReceive()
{
//how to stop code below when 5 second passed&
size_t received = 0;
while (received < 4)
{
ssize_t r = read(fd, buffer, 4);
if (r <= 0) break;
received += r;
}
}

最佳答案

使用 select(),这将阻塞直到有内容可供读取或最多在如下时间间隔中指定的时间内。

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

select() 不会读取或写入,它所做的是针对一组描述符(readfds、writefds 和/或 exceptfds),它将等待/阻塞直到发生以下情况之一:

  • 有一个描述符可供读取
  • 有一个描述符准备好写入
  • 其中一个描述符出现异常,就像它已关闭
  • 如果指定了超时时间,当配置的时间到期

如果你只是简单地需要“等待”( sleep )5 秒,然后读取,你可以 sleep (usleep() 在 linux 上)5 秒,然后进行非阻塞读取通过设置套接字选项,或使用最小超时调用 select() 并检查是否有任何内容要读取。

这是一个相关的问题。 How C++ select() function works in Unix OSs?

关于c++ - 功能工作定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10816830/

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