如何使用套接字和定时器而不会相互阻塞?

时间:2012-01-14 23:58:27

标签: c++ sockets timer

我的项目是一个作业服务器,它将UDP接收的命令存储在队列中。每个命令都有一个要执行的间隔值和一个要删除的超时值。这些操作由必须独立于服务器代码运行的计时器控制,如2个进程。

使服务器和计时器在不相互阻塞的情况下运行的最佳方法是什么?我正在考虑线程或异步调用,但我是C ++的新手,我不知道如何在我的代码中应用这些想法。

我正在使用Boost 1.48中的Visual C ++ 2010和ASIO。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用Boost ASIO安排异步(非阻塞)deadline_timer,如下所述:http://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio/tutorial/tuttimer2.html

我假设你已经在使用ASIO进行UDP通信了(因为你提到过两者) - 现在只需要在事件循环中安排你需要的定时器,一切都应该正常工作。

答案 1 :(得分:0)

您应该能够在一个线程中使用“非阻塞套接字”和手动计算的计时器(例如,使用应用程序启动时的滴答,可在SDL中使用)来执行此操作,但这会导致CPU使用率过高。

多线程听起来好多了,但是有多种变体如何做到这一点。 例如:linux下的http://support.microsoft.com/kb/815805或pthreads。

谷歌的“多线程Visual C ++ 2010”应该会告诉你更多。