12

我目前正在为 boost 线程开发一个小型包装类,但我并没有真正了解睡眠功能是如何工作的,这就是我到目前为止所得到的:

BaseThread::BaseThread(){
    thread = boost::thread();
    bIsActive = true;
}

BaseThread::~BaseThread(){
    join();
}

void BaseThread::join(){
    thread.join();
}

void BaseThread::sleep(uint32 _msecs){
    if(bIsActive)
        boost::this_thread::sleep(boost::posix_time::milliseconds(_msecs));
}

到目前为止,这就是我实现它的方式,但我真的不明白静态 this_thread::sleep 方法如何知道如果我的线程包装器的多个实例处于活动状态时要休眠哪个线程。这是实施它的正确方法吗?

4

2 回答 2

17

boost::this_thread::sleep将使当前线程休眠。只有线程本身可以进入睡眠状态。如果要让线程休眠,请在线程中添加一些检查代码或使用中断

更新:如果您使用带有最新标准库的 c++11 编译器,您将可以访问std::this_thread::sleep_forstd::this_thread::sleep_until函数。但是,没有标准的中断机制。

于 2009-12-29T11:31:31.747 回答
2

sleep 总是影响当前线程(调用该方法的线程)。

于 2009-12-29T11:32:24.570 回答