我目前正在使用select()
处理多个客户端的多客户端服务器上工作。但是,当客户端发送需要大量计算的消息时,我必须使用pthread_create()
创建一个新线程,以便我的服务器可以保持对来自客户端的其他消息的响应。一旦计算完成后,我需要能够将消息返回给客户端。但我不知道我如何知道该线程是否已完成,以及如何获得最终结果。很明显,我无法使用pthread_join()
,因为这会在运行新线程时阻塞我的服务器程序。那么C是否提供了一个函数,可以用来获取该子线程的最终结果?我想避免使用全局变量。C - 使用pthread并等待返回值
0
A
回答
1
你可以只检查是否线程从主线程加入它(这将是非阻塞)之前完成
你应该得到怎样从这里做到这一点:How do you query a pthread to see if it is still running?
否则你可能只需从子线程发回答案,就可以传递连接信息作为线程函数的参数。
1
如果您希望子线程在完成处理时唤醒正在等待select()
的线程,则可以使用pipe()
来创建管道。调用select()
的线程将管道的读取端添加到其文件描述符集中,并且子线程在完成其工作时写入管道的写入端。
如果结果不是太大,你甚至可以通过管道发送结果。
相关问题
- 1. Javascript并没有等待返回值
- 2. 同步返回值并等待飞镖
- 3. 等待函数返回值
- 4. 等待返回值NodeJS
- 5. C#.NET等待所有线程完成并获得返回值
- 6. 检测C中的等待线程Pthread
- 7. 返回类型Pthread使用C++创建
- 8. 等待异步回调返回值
- 9. Pthread和等待条件
- 10. pthread播放然后等待?
- 11. pthread返回值到数组
- 12. 使pthread等待另一个数据
- 13. JavaScript似乎没有等待返回值
- 14. c#异步方法和返回等待
- 15. C#.NET异步等待返回类型
- 16. C#等待任务组返回对象
- 17. 等待一个字符串返回值
- 18. 等待方法的返回值
- 19. “等待”ReadyState在返回值前为4
- 20. Ç - 等待,得到的返回值
- 21. jQuery的等待事件的返回值
- 22. 等待连接时server.accept()的返回值
- 23. 在返回值之前等待iPhone
- 24. 如何等待$ .getJson的返回值
- 25. Ruby(鞋子) - 等待函数返回值
- 26. 返回值前等待承诺
- 27. simplemodal确认实例等待返回值
- 28. 我的pthread会等待还是等待主线程?
- 29. 使DialogBox等待用户操作并返回布尔GWT
- 30. pthread返回251
'那么C是否提供了一个函数,可以用来获取该子线程的最终结果?'是的,选择()。 – ThingyWotsit
或者,通过相关的fd线程并直接回复。 – ThingyWotsit
@ThingyWotsit我认为select()只适用于文件描述符: –