如何在不相互阻塞的情况下使用套接字和计时器

How to use sockets and timers without blocking each other?

本文关键字:情况下 套接字 计时器      更新时间:2023-10-16

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

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

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

谢谢!

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

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

您应该能够在一个线程中通过使用"非阻塞套接字"和手动计算的计时器(例如,使用从应用程序启动开始的滴答声,在SDL中可用)来完成这项工作,但这会导致高CPU使用率。

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

谷歌的"多线程可视化C++2010"应该会告诉你更多。

相关文章: