asio.run()的问题
2015-04-01 10:06
148 查看
昨天在调试项目工程的时候遇到了一个现象:
因为,我在ocx和服务器之间做了一个tcp连接,为了检测连接是否断开,所以手动做了一个保活,即,每隔一段时间就给对方发送一个保活请求。当检测到连接断开后,ocx启动重新连接!问题来了,当重新连接后,程序不会退出重连,而是不断的连接。经过排查,问题的原因是:asio.run()的使用问题。查询asio官网,在run函数的说明下面,有这么一句话:
The
run()function
must not be called from a thread that is currently calling one of
run(),
run_one(),
poll()or
poll_one()on
the same
io_serviceobject.这句话的意思是,在一个io_service的线程中,如果已经调用过了
run(),
run_one(),
poll()or
poll_one(),那么久不能在调用run了。
但是,我们又必要要run函数在宝石io_service的正常运行,怎么办呢?于是,我看到了reset()函数。
This function must be called prior to any second or later set of invocations of therun(),
这也就是说,在我们第二次调用run函数之前,我们必须首先调用reset()函数,因为在我们第一次调用run结束之后,stopped()是返回true的,所以,如果我们第二次直接调用run,那么run是会直接退出的,reset会让stoped()返回false。
相关文章推荐
- VLC is not supposed to be run as root. 问题解决
- Ubuntu10.04上apache2: bad user name ${APACHE_RUN_USER}问题解决
- CentOS 6.4 开机 unexpected inconsistency run fsck manually 问题的修复
- Could not find method runProguard问题解决
- boost asio 几个问题
- 解决问题:Cannot run byobu because [root] does not own [/root]
- 解决vue-cli npm run build之后vendor.js文件过大的问题
- 开启Instant Run后,打包适配问题
- eclipse下Maven wabapp项目没有Run on Server问题
- Angularjs MVC 以及 $scope 作用域 Angularjs 模块 的 run 方法 以及依赖注入中代码压缩问题
- 执行adb roo提示tadbd cannot run as root in production builds问题
- 解决io_service::run在没有任务就返回的问题
- 在run方法中使用static成员变量问题
- start和run方法的一些问题
- 记一次Android系统下解决音频UnderRun问题的过程
- Apache启动问题:overwritten -- Unclean shutdown of previous Apache run
- Android Studio在连接手机时候,出现"Instant Run requires 'Tools..."不能安装软件的问题
- vs2010编译没有问题,然而运行出错Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.
- 解决nginx重启“var/run/nginx/nginx.pid" no such file or directory问题
- 关于构建webx的时候运行mvn jetty:run出现无法打开C:\Users\GS\.m2\repository\commons-lang.2.4.jar的问题