由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 服务器端纯的asio的异步怎么写?
相关主题
ASIO异步一问parallel programming的复杂性分层/流行工具技术名词
C++ ASIO异步一问goodbug基本不会编程,就会吹牛逼
请教一个Node.js的疑惑看了一下Meteor很不错
用ASIO写TCP/IP,同步还是异步 ?说了半天异步是大势所趋没什么疑问了
An interview project: asynchronous socket programming宇宙无敌的太监算法
大牛们讨论一下异步编程吧问一个XCode的问题
同步编程真郁闷这年头async IO成了流行了
看了一下C#的async await多线程,异步,并发冲突,fp和其它
相关话题的讨论汇总
话题: io话题: service话题: asio话题: tcp话题: accept
进入Programming版参与讨论
1 (共1页)
b***i
发帖数: 3043
1
还是那个问题,怎么中断accept?
asio::io_service io_service;
tcp_server server(io_service);
io_service.run();
这第三行就是等待,等价于这里同步了。那么这个等待怎么中断accept呢?
b*******s
发帖数: 5216
2
write a callback function

【在 b***i 的大作中提到】
: 还是那个问题,怎么中断accept?
: asio::io_service io_service;
: tcp_server server(io_service);
: io_service.run();
: 这第三行就是等待,等价于这里同步了。那么这个等待怎么中断accept呢?

b***i
发帖数: 3043
3
都有了,根据asioref-1.10.6.pdf,使用的是async_accept,然后
asio::io_service io_service;
tcp_server server(io_service);
io_service.run();//这一步怎么替换成异步?
public:
tcp_server(asio::io_service& io_service)
: acceptor_(io_service, tcp::endpoint(tcp::v4(), 13))
{
start_accept();
}
private:
void start_accept()
{
tcp_connection::pointer new_connection =
tcp_connection::create(acceptor_.get_io_service());
acceptor_.async_accept(new_connection->socket(),
std::bind(&tcp_server::handle_accept, this, new_connection,
std::placeholders::_1));
}

【在 b*******s 的大作中提到】
: write a callback function
b***i
发帖数: 3043
4
另外,我是把io_service.run()放在线程A里的,而run()在等待的时候确实能够进行服
务器的服务,但是,当我需要结束的时候不知道如何通知这个线程A停止。结果Windows
下出现对话框,Abort, Retry, ...
应该是这个thread A析构的时候出了错。

【在 b*******s 的大作中提到】
: write a callback function
h**********c
发帖数: 4120
5
你的问题我没太仔细看,也不懂你那个asio在说什么
估计你是想解决连接请求saturate主线程的问题
我老当年的办法就是接到一个socket,就start 一个新thread,把所有的活扔给新
thread,主线程只管accept,传参。
这个可能答非所问,不过你问的很底层,又偏要上framework,就算平手了。

【在 b***i 的大作中提到】
: 还是那个问题,怎么中断accept?
: asio::io_service io_service;
: tcp_server server(io_service);
: io_service.run();
: 这第三行就是等待,等价于这里同步了。那么这个等待怎么中断accept呢?

b***i
发帖数: 3043
6
不是,我就是想在需要的时候停止线程而已。我一共允许9个接入,也不会有很多接入
。当我一个端口收到{exit}内容的时候,我需要程序完美退出。那么,所有等待的线程
就都要停止。就这个目的。
我就奇怪,在Java里轻而易举的事情,咋这么难?那Java怎么做的?我现在有个Java程
序就是服务器端等待,然后我可以退出而不产生错误。可是试了两种,都是Windows提
示有重大问题的退出。

【在 h**********c 的大作中提到】
: 你的问题我没太仔细看,也不懂你那个asio在说什么
: 估计你是想解决连接请求saturate主线程的问题
: 我老当年的办法就是接到一个socket,就start 一个新thread,把所有的活扔给新
: thread,主线程只管accept,传参。
: 这个可能答非所问,不过你问的很底层,又偏要上framework,就算平手了。

h**********c
发帖数: 4120
7
你unix 怎么样?你有fork 就wait children/join之类的。java 类似的东西叫
shutdown hook,就是你等子线程关闭资源的地方。visual c++的等同叫close handle.
这两个我都写过。
前两天说node的什么东西,也就是这个吧

【在 b***i 的大作中提到】
: 不是,我就是想在需要的时候停止线程而已。我一共允许9个接入,也不会有很多接入
: 。当我一个端口收到{exit}内容的时候,我需要程序完美退出。那么,所有等待的线程
: 就都要停止。就这个目的。
: 我就奇怪,在Java里轻而易举的事情,咋这么难?那Java怎么做的?我现在有个Java程
: 序就是服务器端等待,然后我可以退出而不产生错误。可是试了两种,都是Windows提
: 示有重大问题的退出。

b***i
发帖数: 3043
8
好像成功了,就是还在动的线程呼叫等待的那个线程(A)的io_service.stop();那么那
个线程A就会停止等待。

【在 b***i 的大作中提到】
: 不是,我就是想在需要的时候停止线程而已。我一共允许9个接入,也不会有很多接入
: 。当我一个端口收到{exit}内容的时候,我需要程序完美退出。那么,所有等待的线程
: 就都要停止。就这个目的。
: 我就奇怪,在Java里轻而易举的事情,咋这么难?那Java怎么做的?我现在有个Java程
: 序就是服务器端等待,然后我可以退出而不产生错误。可是试了两种,都是Windows提
: 示有重大问题的退出。

1 (共1页)
进入Programming版参与讨论
相关主题
多线程,异步,并发冲突,fp和其它An interview project: asynchronous socket programming
真正对异步有需求的应该是游戏类服务器大牛们讨论一下异步编程吧
scala的基于future并行async程序怎么写同步编程真郁闷
如何快速处理大量网上xml文件?看了一下C#的async await
ASIO异步一问parallel programming的复杂性分层/流行工具技术名词
C++ ASIO异步一问goodbug基本不会编程,就会吹牛逼
请教一个Node.js的疑惑看了一下Meteor很不错
用ASIO写TCP/IP,同步还是异步 ?说了半天异步是大势所趋没什么疑问了
相关话题的讨论汇总
话题: io话题: service话题: asio话题: tcp话题: accept