【发布时间】:2014-01-12 03:41:05
【问题描述】:
以下代码:
/***************************************************************************/
boost::mutex m;
struct func {
func(int v):n(v) {}
void operator()() {
{ boost::mutex::scoped_lock l(m);
std::cout << "run function " << n << std::endl;
}
for ( int idx = 0; idx < 4; ++idx ) {
{ boost::mutex::scoped_lock l(m);
std::cout << "function " << n << ", ping " << idx << std::endl;
}
sleep(1);
}
}
private:
int n;
};
/***************************************************************************/
int main(int argv, const char** argc) {
boost::asio::io_service io;
for ( int idx = 0; idx < 4; ++idx ) {
io.post(func(idx));
}
std::cout << "before run" << std::endl;
io.poll();
std::cout << "after run" << std::endl;
std::cin.get();
return 0;
}
/***************************************************************************/
给出这样的输出:
**before run**
run function 0
function 0, ping 0
function 0, ping 1
function 0, ping 2
function 0, ping 3
run function 1
function 1, ping 0
function 1, ping 1
function 1, ping 2
function 1, ping 3
run function 2
function 2, ping 0
function 2, ping 1
function 2, ping 2
function 2, ping 3
run function 3
function 3, ping 0
function 3, ping 1
function 3, ping 2
function 3, ping 3
**after run**
但是,根据文档:
poll() 函数运行处理程序 准备好运行,没有阻塞, 直到 io_service 停止 或者没有更多的就绪处理程序。
poll() - 是一种非阻塞方法。 有什么问题?
第二个问题: 在文档中说:
return 处理程序的数量 被处决了。
如果它是非阻塞的,它会返回什么值? - 队列中的对象数量? - 但这与“被执行”不同。
【问题讨论】:
标签: c++ boost boost-asio