草庐IT

scoped_thread

全部标签

c++ - 线程不起作用并出现错误:启用多线程以使用 std::thread:不允许操作

我在我的系统上创建并执行了一个简单的线程。当我执行这个程序时,我收到错误消息:Enablemultithreadingtousestd::thread:Operationnotallowed关于我的系统的一些细节:linuxubuntu13.10g++4.8.1我编译包含库pthread的源代码源代码:#include#includeusingnamespacestd;voidfunc(void){cout 最佳答案 您似乎正在尝试使用C++11线程。如果是真的,那么正确#include和#include,即不要使用"在这些行中添加

C++11 线程等待行为:std::this_thread::yield() 与 std::this_thread::sleep_for( std::chrono::milliseconds(1) )

我在编写Microsoft特定的C++代码时被告知要编写Sleep(1)在自旋锁定方面比Sleep(0)好得多,因为Sleep(0)将使用更多的CPU时间,而且,它只有在有另一个同等优先级线程等待运行。但是,对于C++11线程库,没有太多关于std::this_thread::yield()效果的文档(至少我能够找到)vs.std::this_thread::sleep_for(std::chrono::milliseconds(1));第二个肯定更冗长,但它们对于自旋锁是否同样有效,或者它是否受到影响Sleep(0)与Sleep(1)?一个示例循环,其中std::this_threa

C++11 线程等待行为:std::this_thread::yield() 与 std::this_thread::sleep_for( std::chrono::milliseconds(1) )

我在编写Microsoft特定的C++代码时被告知要编写Sleep(1)在自旋锁定方面比Sleep(0)好得多,因为Sleep(0)将使用更多的CPU时间,而且,它只有在有另一个同等优先级线程等待运行。但是,对于C++11线程库,没有太多关于std::this_thread::yield()效果的文档(至少我能够找到)vs.std::this_thread::sleep_for(std::chrono::milliseconds(1));第二个肯定更冗长,但它们对于自旋锁是否同样有效,或者它是否受到影响Sleep(0)与Sleep(1)?一个示例循环,其中std::this_threa

C++:来自 std::thread 的简单返回值?

对于win32线程,我有直接的GetExitCodeThread()给我线程函数返回的值。我正在为std::thread(或增强线程)寻找类似的东西据我了解,这可以通过future来完成,但具体如何? 最佳答案 见thisvideotutorial关于C++11的future。明确地使用线程和future:#include#includevoidfunc(std::promise&&p){p.set_value(1);}std::promisep;autof=p.get_future();std::threadt(&func,std

C++:来自 std::thread 的简单返回值?

对于win32线程,我有直接的GetExitCodeThread()给我线程函数返回的值。我正在为std::thread(或增强线程)寻找类似的东西据我了解,这可以通过future来完成,但具体如何? 最佳答案 见thisvideotutorial关于C++11的future。明确地使用线程和future:#include#includevoidfunc(std::promise&&p){p.set_value(1);}std::promisep;autof=p.get_future();std::threadt(&func,std

c++ - boost scoped_lock 与普通锁定/解锁

我将使用boost/thread/mutex.hpp中的boost::mutex。有几种方法可以锁定/解锁互斥锁:使用scoped_lock、unique_lock、lock_guard、互斥锁的成员函数::lock()和::unlock()以及非成员函数lock()和unlock()。我注意到,boost::scoped_mutex是使用互斥锁的最流行的方式之一。为什么比成员函数::lock()和::unlock()更可取?特别是为什么要使用{boost::scoped_locklock(mutex)//...//read/outputsharingmemory.//...}而不是m

c++ - boost scoped_lock 与普通锁定/解锁

我将使用boost/thread/mutex.hpp中的boost::mutex。有几种方法可以锁定/解锁互斥锁:使用scoped_lock、unique_lock、lock_guard、互斥锁的成员函数::lock()和::unlock()以及非成员函数lock()和unlock()。我注意到,boost::scoped_mutex是使用互斥锁的最流行的方式之一。为什么比成员函数::lock()和::unlock()更可取?特别是为什么要使用{boost::scoped_locklock(mutex)//...//read/outputsharingmemory.//...}而不是m

C++ 11:std::thread池化?

在C++03中,我将pthread与一个自建线程池一起使用,该线程池始终保持几个线程运行(因为pthread_create很慢),这样我就可以启动小线程任务而不考虑性能问题。现在,在C++11中,我们有了std::thread。我想标准没有说明具体的实现,所以我的问题是关于标准库的实现。他们通常会选择一种池化方法,其中构造std::threads很便宜(例如,不会在posix上调用pthread_create),还是会std::thread只是一个包装器?换句话说,C++11中是否仍然推荐使用线程池,还是应该在需要时创建一个std::thread并将性能留给标准库?

C++ 11:std::thread池化?

在C++03中,我将pthread与一个自建线程池一起使用,该线程池始终保持几个线程运行(因为pthread_create很慢),这样我就可以启动小线程任务而不考虑性能问题。现在,在C++11中,我们有了std::thread。我想标准没有说明具体的实现,所以我的问题是关于标准库的实现。他们通常会选择一种池化方法,其中构造std::threads很便宜(例如,不会在posix上调用pthread_create),还是会std::thread只是一个包装器?换句话说,C++11中是否仍然推荐使用线程池,还是应该在需要时创建一个std::thread并将性能留给标准库?

c++ - 将多个参数传递到 std::thread

我在问C++11标准中的库。假设你有这样的功能:voidfunc1(inta,intb,ObjAc,ObjBd){//blahblahimplementation}intmain(intargc,char*argv[]){std::thread(func1,/*whatdodohere??*/);}如何将所有这些参数传递到线程中?我尝试列出如下参数:std::thread(func1,a,b,c,d);但它提示没有这样的构造函数。解决这个问题的一种方法是定义一个结构来打包参数,但是还有另一种方法吗? 最佳答案 您实际上只是在std: