我目前正在使用select()
处理多个客户端的多客户端服务器。但是,当客户端发送需要大量计算的消息时,我必须使用pthread_create()
创建一个新线程,以便我的服务器可以保持对来自客户端的其他消息的响应。一旦为该客户端完成计算,我就需要能够向客户端返回一条消息。但我不知道如何知道该线程是否完成以及如何获得最终结果。显然,我不能使用pthread_join()
,因为它会在运行新线程时阻止我的服务器程序。那么C提供了一个函数,我可以使用它来获得该子线程的最终结果吗?我也想避免使用全局变量。
答案 0 :(得分:1)
You can just check if the thread has finished before joining it from the main thread (which will be non blocking)
You should get how to do it from here : How do you query a pthread to see if it is still running?
中的python CGI脚本否则你可能只是从子线程发回回答,你可以传递连接信息作为线程函数的参数。
答案 1 :(得分:1)
如果您希望子线程在完成处理时唤醒在select()
中等待的线程,则可以使用pipe()
来创建管道。调用select()
的线程将管道的读取端添加到其文件描述符集中,子线程在完成其工作后写入管道的写入端。
如果结果不是太大,你甚至可以通过管道发送结果。