我的项目是一个作业服务器,它将UDP接收的命令存储在队列中。每个命令都有一个要执行的间隔值和一个要删除的超时值。这些操作由必须独立于服务器代码运行的计时器控制,如2个进程。
使服务器和计时器在不相互阻塞的情况下运行的最佳方法是什么?我正在考虑线程或异步调用,但我是C ++的新手,我不知道如何在我的代码中应用这些想法。
我正在使用Boost 1.48中的Visual C ++ 2010和ASIO。
谢谢!
答案 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”应该会告诉你更多。