大家好,我有一个关于c中超时的问题,所以我问你们。
所以我在C中使用POSIX线程接受多个简单连接的服务器应用程序,但实现超时比我预期的更难,因为我读取消息(HTTP请求)的部分首先是开始行,而不是头等,等。我则使用select()来检测套接字是否准备好开始阅读但是这样如果客户端发送线只比服务器将继续等待头和身体没有超时,所以我把所有读取消息的代码放在一个函数,我不为整个函数实现一个超时,如果函数不返回x秒超时函数和线程退出…
[我尝试过的事情]
- 放置多个选择调用(每个套接字读取一个),但最终不得不计算每个操作的剩余时间。
- 我实际上并没有尝试使用报警信号,因为我听说信号会影响整个进程,而不是一个特定的线程,这会导致每次并行连接超时一次。
提前感谢……B)
除了让一个线程函数结束,没有合适的方法来终止它。
每次尝试从外部完成线程都可能导致资源(主要是但不仅仅是内存)泄漏,状态变量处于不确定状态,等等。请不要这样做。从来没有。从外部终止线程函数的正常方法是使其侦听线程间通信的某种方式(可以是同步对象, volatile变量甚至消息循环),并在必要时退出函数核心。通常您可以通过在循环条件中进行单个测试来实现它,如果它在线程内的每个长时间运行的操作之前进行循环或测试。
现在,如果你存储函数start和test的时间戳在每个循环条件/长时间运行的测试if currenttimestamp> timestamp + timeout,你可以退出你的线程和voil