2017-05-18 55 views
0

我目前正在使用select()处理多个客户端的多客户端服务器上工作。但是,当客户端发送需要大量计算的消息时,我必须使用pthread_create()创建一个新线程,以便我的服务器可以保持对来自客户端的其他消息的响应。一旦计算完成后,我需要能够将消息返回给客户端。但我不知道我如何知道该线程是否已完成,以及如何获得最终结果。很明显,我无法使用pthread_join(),因为这会在运行新线程时阻塞我的服务器程序。那么C是否提供了一个函数,可以用来获取该子线程的最终结果?我想避免使用全局变量。C - 使用pthread并等待返回值

+1

'那么C是否提供了一个函数,可以用来获取该子线程的最终结果?'是的,选择()。 – ThingyWotsit

+0

或者,通过相关的fd线程并直接回复。 – ThingyWotsit

+0

@ThingyWotsit我认为select()只适用于文件描述符: –

回答

1

如果您希望子线程在完成处理时唤醒正在等待select()的线程,则可以使用pipe()来创建管道。调用select()的线程将管道的读取端添加到其文件描述符集中,并且子线程在完成其工作时写入管道的写入端。

如果结果不是太大,你甚至可以通过管道发送结果。