C 和线程中的函数超时

Function timeouts in C and thread

大家好,我有一个关于 c 中超时的问题,所以我问你们。

所以我正在用 C 编写一个服务器应用程序,它使用 POSIX 线程来接受多个同时连接,但是实现超时比我预期的要难,因为我首先在开始时阅读了部分消息(HTTP 请求)行比 headers 等,我最初使用 select() 来检测套接字是否准备好读取但是如果客户端只发送起始行,服务器将继续等待headers 和 body 永远不会超时所以我所做的是将所有读取消息的代码放在一个函数中并且我不想为整个函数实现超时,比如函数在 x 秒内没有 return 调用超时函数并退出线程...

[我尝试过的事情]

  1. 进行多次 select 调用(每次读取套接字调用一次),但最终导致必须计算每个操作的剩余时间。
  2. 我实际上并没有尝试使用警报信号,因为我听说信号会影响整个过程,而不是会导致每个并行连接超时的特定线程..

提前致谢.. B)

除了让它完成之外,没有其他正确的方法来终止线程函数。


每次从外部完成线程的尝试都可能导致资源(主要但不仅仅是内存)泄漏、状态变量处于不确定状态,等等。请不要这样做。绝不。从外部终止线程函数的正常方法是让它监听一些线程间通信的方式(可以是sync对象、volatile变量甚至是消息循环) , 必要时退出函数核心。通常你会通过在线程的 循环条件 中进行一次测试来实现它,如果它在你的线程内的每个 long-运行 操作之前循环或测试。

现在如果你在每个周期存储函数开始和测试的时间戳condition/long-running test if currenttimestamp > timestamp + timeout,你可以从线程内部退出瞧!你的问题解决了。