- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想让一个 boost 线程休眠几纳秒。以下代码是编译无误的示例。但是,它没有按预期工作,我不明白为什么。
#include <iostream>
#include <boost/thread.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time.hpp>
//Building options:
//-DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIG -lboost_date_time-mt -lboost_thread-mt
void replay()
{
boost::posix_time::time_duration time1, time2;
time1=boost::posix_time::seconds(3);
std::cout << boost::posix_time::to_simple_string(time1) << std::endl;
boost::this_thread::sleep(time1);
time2=boost::posix_time::nanoseconds(987654321);
std::cout << boost::posix_time::to_simple_string(time2) << std::endl;
boost::this_thread::sleep(time2);
}
int main(int argc, char* argv[])
{
boost::thread replaythread(replay);
replaythread.join();
return 0;
}
BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG 是处理纳秒 (more info) 所需的预处理器定义。当我设置 -DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIG 构建选项时出现问题,然后 boost::this_thread::sleep 对任何 posix::time_duration 都不起作用。创建的线程使用了所有的 CPU,它既不休眠也不处理剩余的指令。如果移除预处理器定义,则线程可以休眠任何时间段,除非 boost::posix_time::nanoseconds。该程序使用一些 time_duration 变量来存储纳秒,这使得 boost::this_thread::sleep 无法工作。
非常感谢您的宝贵时间
最佳答案
BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
更改了 ptime
的大小。
boost::this_thread::sleep
是一个编译函数,它是在没有定义的情况下(在您的发行版上)编译的,因此它需要微秒精度的 ptime 参数。您正在传递纳秒级精度的 ptime 参数,函数失败。
如果您从 boost 库中提取代码并在启用此定义的情况下对其进行编译,程序将按预期运行:
#include <iostream>
#include <boost/thread.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time.hpp>
// the guts of boost_1_46_1/libs/pthread/thread.cpp's version of sleep()
boost::mutex sleep_mutex;
boost::condition_variable sleep_condition;
void mysleep(const boost::posix_time::time_duration& dur)
{
boost::system_time st = boost::get_system_time() + dur;
boost::unique_lock<boost::mutex> lk(sleep_mutex);
while(sleep_condition.timed_wait(lk, st));
}
void replay()
{
boost::posix_time::time_duration time1, time2;
time1=boost::posix_time::seconds(3);
std::cout << boost::posix_time::to_simple_string(time1) << std::endl;
mysleep(time1);
//boost::this_thread::sleep(time1);
time2=boost::posix_time::nanoseconds(987654321);
std::cout << boost::posix_time::to_simple_string(time2) << std::endl;
mysleep(time2);
//boost::this_thread::sleep(time2);
}
int main()
{
boost::thread replaythread(replay);
replaythread.join();
return 0;
}
关于c++ - 让一个 boost 线程休眠几纳秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6636731/
根据这个问题:Fractional power of units of measures in F# F# 中的度量单位不支持分数幂。 在我的应用程序中,有时考虑带有度量前缀的数据是有益的,例如当处理
我是一名优秀的程序员,十分优秀!