大家好,我有一个关于c超时的问题,所以我问你们。
所以我在C中创建一个服务器应用程序,它使用POSIX线程来接受多个简单的连接,但是实现超时比我预期的要困难,因为我首先在部分起始行读取消息(HTTP请求)而不是标题等,等,我最初使用select()来检测套接字是否已准备好进行读取,但是如果客户端仅发送起始行,那么服务器将继续等待标题和正文而不会超时,所以我做的就是我将所有读取消息的代码放在一个函数中,我不想为整个函数实现超时,比如函数在x秒内没有返回,而不是调用超时函数并退出线程......
[我尝试的事情]
thanx .. B)
答案 0 :(得分:0)
除了让它完成之外,没有正确的方法来终止线程函数。
每次从外部完成一个线程的尝试都可能导致资源(主要是但不仅是内存)泄漏,处于非确定状态的状态变量等等。请不要这样做。决不。从外部终止线程函数的常规方法是使其监听某些线程间通信方式(可以是同步对象,易失性变量甚至是消息循环),然后退出必要时的功能核心。通常情况下,如果在线程中的每个长时间运行操作之前进行循环或测试,则在线程的循环条件中进行单个测试即可实现。
现在,如果 currenttimestamp>存储了每个循环条件/长时间运行测试中函数start和test的时间戳。时间戳+超时,你可以从你的线程内部退出并消失;你的问题已经解决了。