如何在不相互阻塞的情况下使用套接字和计时器
How to use sockets and timers without blocking each other?
我的项目是一个将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"应该会告诉你更多。
相关文章:
- 在不知道套接字的情况下关闭网络连接
- UDP 套接字 select() 在某些情况下无延迟(超时)返回 1
- 如何在不设置 ulimit -n 的情况下解决套接字程序打开太多文件的错误
- 如何在没有套接字管理的情况下使用OpenSSL库?
- 我可以在不包含 <sys/socket.h> 的情况下使用 C 套接字吗?
- C++,在阻塞模式下从套接字读取所有可用字节的最佳方法
- 套接字:在没有memcpy的情况下,使用recvfrom将UDP数据获取到字对齐的缓冲区
- 在没有 SO_LINGER > 0 的情况下强制关闭服务器端套接字可能会丢失数据,对吧?
- 抽象库,便于在linux下进行套接字编程
- c++套接字客户端在输出流关闭的情况下不断从Java服务器事件中接收一些内容
- 如何处理在同一套接字上发布多个操作的情况
- 即使在文件描述符不可用的情况下,也能有效地侦听多个套接字
- 如何在不关闭服务器套接字的情况下在C++客户端的主循环中接收数据?
- 如何在不相互阻塞的情况下使用套接字和计时器
- Listen套接字只能在没有-std=c++的情况下在c++中工作
- 如何在winsock中不绑定套接字的情况下接收数据
- 在这种情况下,sendto()在UDP套接字上返回0
- 在不关闭本机处理程序的情况下销毁Boost Asio套接字
- 如何在连接了所有客户端套接字的情况下关闭boost asio服务器套接字
- 在有条件的情况下,连接到C++和Boost Asio中的套接字