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提 : 示有重大问题的退出。
|