草庐IT

thread_posixs

全部标签

c++ - 以秒为单位获取 boost::posix_time::time_duration

我正在使用boost::posix_time::ptime来测量我的模拟运行时间和其他东西。假设boost::posix_time::ptimestart,stop;boost::posix_time::time_durationdiff;start=boost::posix_time::microsec_clock::local_time();sleep(5);stop=boost::posix_time::microsec_clock::local_time();diff=stop-stop;现在std::cout以hh:mm:ss.ssssss格式返回时间,我也希望以ss.sss

c++ - 带有可移动、不可复制参数的 std::thread

以下程序不在VS11beta、gcc4.5或clang3.1中构建#include#includeintmain(){std::unique_ptrp;std::threadth([](std::unique_ptr){},std::move(p));th.join();}这是因为参数类型不可复制,但实现试图复制它。据我所知,这个程序格式正确,应该可以运行。std::thread的要求似乎暗示可移动的、不可复制的参数应该在这里起作用。具体来说,它表示可调用对象和每个参数应满足MoveConstructible要求,并且INVOKE(DECAY_COPY(std::forward(f))

c++ - boost::thread - 简单示例不起作用 (C++)

为了开始使用boost::thread,我编写了一个非常简单的示例——它不起作用。谁能指出我的错误?我写了一个非常简单的仿函数类型的类来完成这项工作。它应该计算doublestd::vector的总和,并给我一种稍后获取结果的方法:classSumWorker{private:double_sum;public:SumWorker():_sum(-1.0){}voidoperator()(std::vectorconst&arr){_sum=0.0;for(std::vector::const_iteratori=arr.begin();i!=arr.end();i++){_sum+=

c++ - 'yield' 不是 'std::this_thread' 的成员

我试图让出当前线程:std::this_thread::yield();但不幸的是,GCC知道得更多:'yield'isnotamemberof'std::this_thread'我是否忘记了一些类似于D_GLIBCXX_USE_NANOSLEEP的hack,或者什么? 最佳答案 是的,这似乎是一个类似于_GLIBCXX_USE_NANOSLEEP的问题。GCC根据宏_GLIBCXX_USE_SCHED_YIELD有条件编译yield。如果您定义它,它应该可以编译。这将在GCC4.8中修复。

c++ - OpenMP num_threads(1) 比没有 OpenMP 执行得更快

我在各种情况下运行过我的代码,这导致了我认为奇怪的行为。我的测试是在具有HT的双核英特尔至强处理器上进行的。没有OpenMP'#pragma'语句,总运行时间=507秒使用指定1个内核的OpenMP“#pragma”语句,总运行时间=117秒使用指定2个内核的OpenMP'#pragma'语句,总运行时间=150秒使用指定3个内核的OpenMP'#pragma'语句,总运行时间=157秒使用指定4核的OpenMP'#pragma'语句,总运行时间=144秒我想我不明白为什么注释掉我的openmp行会使程序在1个没有openmp的线程和1个有openmp的线程之间变慢很多。我要改变的是:

c++ - 错误 : 'std::this_thread' has not been declared

我尝试使用std::this_thread::sleep_for()函数但出现错误错误:“std::this_thread”尚未声明。包含标志_GLIBCXX_USE_NANOSLEEP。还需要什么来强制它工作?MinGW==>gcc版本4.7.2(GCC)中南合作:#includeintmain(){std::this_thread::sleep_for(std::chrono::seconds(3));}命令行:g++-D_GLIBCXX_USE_NANOSLEEP-std=gnu++0xssce.cpp-ossce.exe编译结果:ssce.cpp:Infunction'intm

c++ - std::bind 和 std::thread 总是复制参数背后的基本原理是什么?

众所周知,std::bind和std::thread的默认行为是它将复制(或移动)传递给它的参数,并且要使用引用语义,我们将不得不使用引用包装器。有谁知道为什么这是一个很好的默认行为?特别是在具有右值引用和完美转发的C++11中,在我看来,完美转发参数更有意义。std::make_shared虽然并不总是复制/移动,但只是完美地转发提供的参数。为什么这里会出现两种看似不同的转发参数行为呢?(总是复制/移动的std::thread和std::bind与不复制/移动的std::make_shared相比) 最佳答案 make_share

c++ - 使用 std::thread 调用重载的成员函数

是否可以重载我们需要使用线程跨越的函数?我有一个名为Complex的简单类。classComplex{public:Complex():realPart_(0),imagPart_(0){}Complex(doublerp,doubleip):realPart_(rp),imagPart_(ip){}double&real(){returnrealPart_;}double&imag(){returnimagPart_;}constdouble&real()const{returnrealPart_;}constdouble&imag()const{returnimagPart_;}d

c++ - QThread 与 std::thread

我看到了关于“pthreadvsstd::thread”和“QThreadvspthread”的不同主题,但没有关于“std::threadvsQThread”的主题。我必须编写一个软件来驱动3D打印机并且需要使用线程。会有一个线程不断检查安全性,另一个线程执行打印过程,一些线程分别驱动每个硬件组件(运动,喷射,...),等等......该程序是使用C++11/Qt为Windows开发的。首先我想使用QThread,但在我看来,QThread不允许您做与std::thread一样多的事情,例如,在阅读“C++ConcurrencyinAction”时通过AnthonyWilliams,

c++ - 如何匿名声明 std::thread?

考虑以下短程序:#includeintFoo(){while(1);}intmain(){std::threadt(Foo);std::threads(Foo);//(std::thread(Foo));t.join();}这会编译并运行(永远),g++-Wl,--no-as-neededDoubleBufferTest.cc-oDoubleBufferTest-std=c++0x-pthread在注释掉的行中,我尝试使用描述的技术here匿名声明一个新线程。但是,当该行被重新注释时,我可以编译但运行时出现以下错误:terminatecalledwithoutanactiveexcep