名为_GLIBCXX_USE_NANOSLEEP的预处理器宏出现在两个标准头文件中:
在GCC 4.7.1(Linux,64位)的默认构建中,c ++ config.h包含的唯一内容是此注释:
/* Defined if nanosleep is available. */
/* #undef _GLIBCXX_USE_NANOSLEEP */
Run Code Online (Sandbox Code Playgroud)
而在线程中,定义std::this_thread::sleep_for()和std::this_thread::sleep_until()依赖于要定义的宏.如果没有定义,那么两个函数 - 尽管C++标准都要求 - 也不会被定义.
在我的系统(glibc 2.15)上,虽然nanosleep()函数(声明在ctime)存在并且可操作,但未定义宏.
我想知道这是什么以及如何处理它.特别:
nanosleep()函数和宏之间真的存在关联吗?nanosleep()in ctime/ 的声明time.h似乎不依赖于或定义宏.-D在命令行中作为选项(如相关问题中的建议)是否存在任何特定风险?如果我在一个nanosleep()不可用的系统上执行此操作会怎么样?我该如何找到它?从GCC 4.8开始更新std::this_thread::sleep_for(),libstdc ++中会自动包含支持等.不再需要配置标志.从GCC 4.8更改日志:
this_thread :: sleep_for(),this_thread :: sleep_until()和this_thread :: yield()的定义不需要配置选项--enable-libstdcxx-time; …
我正在尝试Boost线程,因为据我所知,我可以编写一个多线程Boost应用程序并在Windows或Linux中编译它,而pthreads我更熟悉的是,它严格用于*NIX系统.
我有以下示例应用程序,它是从另一个SO问题中借用的:
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/bind.hpp>
#include <iostream>
#define NAP_DURATION (10000UL) // 10ms
boost::mutex io_mutex;
void count(int id)
{
for (int i = 0; i < 1000; ++i)
{
boost::mutex::scoped_lock lock(io_mutex);
std::cout << "Thread ID:" << id << ": " << i << std::endl;
if (id == 1)
{
std::cout << "I'm thread " << id << " and I'm taking a short nap" << std::endl;
usleep(NAP_DURATION);
}
else
{ …Run Code Online (Sandbox Code Playgroud)