草庐IT

scoped_thread

全部标签

c++ - 带有 Cygwin 1.7 的 GoogleTest 1.6 编译错误 : 'fileno' was not declared in this scope

带有Cygwin1.7的GoogleTest1.6:“fileno”未在此范围内声明在EclipseCDT中对Factorial()函数进行简单测试时出现错误消息:Invoking:CygwinC++Compilerg++-std=c++0x-DGTEST_OS_CYGWIN=1-I"E:\source\gtest-1.6.0\include"-O0-g3-Wall-c-fmessage-length=0-MMD-MP-MF"src/challenge.d"-MT"src/challenge.d"-o"src/challenge.o""../src/challenge.cpp"Infi

c++ - 为什么 boost 没有 make_scoped()?

Boost的make_shared()函数promise在尝试创建shared_ptr时是异常安全的.为什么没有make_scoped()相等的?是否有通用的最佳做法?这是来自boost::scoped_ptrdocumentation的代码示例这对我来说似乎不安全:boost::scoped_ptrx(newShoe);这行代码会依次完成这三件事:为Shoe分配堆内存调用Shoe的构造函数调用boost::scoped_ptr的构造函数如果Shoe的构造函数抛出异常,内存将被泄露。(参见R.MartinhoFernandes的回答)scoped_ptr不会处理释放,因为它还没有被构造

c++ - 将成员函数传递给 std::thread

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:Startthreadwithmemberfunction我最近一直在玩c++11中的新std::thread库,但遇到了一个问题。当我尝试将类函数传递给新线程时,它给了我一个错误(我现在不知道确切的错误文本,因为我不在家)我有这样的课classA{voidFunctA();voidFunctB();voidrun(){std::threadt(FunctA);std::threadr(FunctB);}}我做错了什么? 最佳答案 classA{voidF

C++ 错误 : Sleep was not declared in this scope

我在Ubuntu中使用带有codeBlocks的C++,在GCC4.7中boost1.46[yield_k.hpp]我得到这个编译时错误:error:Sleepwasnotdeclaredinthisscope代码:#includeusingnamespacestd;intmain(){cout如何解决此错误?我希望程序挂起1秒。 最佳答案 Sleep是一个Windows函数。对于Unix,请考虑使用nanosleep(POSIX)或usleep(BSD;已弃用)。一个nanosleep示例:voidmy_sleep(unsigne

c++ - thread_local 的成本

现在C++正在添加thread_local存储作为语言功能,我想知道一些事情:thead_local的成本可能是多少?在内存中?用于读写操作?与此相关:操作系统通常如何实现这一点?似乎任何声明为thread_local的东西都必须为创建的每个线程提供特定于线程的存储空间。 最佳答案 存储空间:变量大小*线程数,或者可能是(sizeof(var)+sizeof(var*))*线程数。实现线程本地存储有两种基本方式:使用某种系统调用来获取有关当前内核线程的信息。慢慢来。使用一些指针,可能在处理器寄存器中,内核在每次线程上下文切换时正确设

c++ - 为什么 Alexandrescu 不能使用 std::uncaught_exception() 在 ScopeGuard11 中实现 SCOPE_FAIL?

这个问题在这里已经有了答案:Scope(failure)inC++11?(2个回答)关闭9年前。毫无疑问,很多人都熟悉Alexandrescus先生的ScopeGuard模板(现在是Loki的一部分)和这里介绍的新版本ScopeGuard11:http://channel9.msdn.com/Shows/Going+Deep/C-and-Beyond-2012-Andrei-Alexandrescu-Systematic-Error-Handling-in-C这里有来源:https://gist.github.com/KindDragon/4650442在2012年及以后的c++演讲中

c++ - 什么时候在其他std::thread机制上使用std::promise是个好主意?

我正在尝试建立一些启发式方法,以帮助我确定要使用的适当std::thread类。据我了解,从最高级别(使用最简单,但最不灵活)到最低级别,我们有:std::asyncwith/std::future(std::shared_future)(当您想一次性使用生产者线程异步执行时)std::packaged_task(当您想分配生产者,但将调用推迟到线程时)std::promise(???)我认为我在前两个何时使用时对有一定的了解,但是对于std::promise仍然不清楚。std::future和std::async调用有效地将产生的回调/functor/lambda转换为异步调用(根据

c++ - `thread_local` 全局变量什么时候初始化?

考虑以下示例(为简单起见,省略了cout上的锁守卫)。#include#include#includeusingnamespacestd;structC{C(){cout>select;futuref[10];for(inti=0;i在clang和gcc上,如果用户写入'0',则该程序不输出任何内容,而如果用户输入非零,它会打印Constructor/Destructor10次数字。此外,clang提示明显未使用的表达式结果。由于thread_local存储生命周期应该跨越整个线程的生命周期,我希望foo变量在每个线程中都被初始化,而不管用户输入如何。我可能想要一个thread-loc

c++ - 在工作完成后立即删除 boost::thread 对象的最佳方法是什么?

我用new操作符创建boost::thread对象并继续而不等待该线程完成其工作:voiddo_work(){//performsomei/owork}boost::thread*thread=newboost::thread(&do_work);我猜,工作完成后需要删除thread。在不显式等待线程终止的情况下,最好的方法是什么? 最佳答案 boost::thread对象的生命周期与native线程的生命周期无关。boost::thread对象可以随时超出范围。来自boost::thread类documentationJustas

c++ - 如何从 boost::thread 中检索线程 ID?

我希望在记录时能够通过简单的id来识别线程,以便轻松跟踪单个线程的执行。使用APIGetCurrentThreadId()的windows可以实现我想要的。在boost::thread中有一个方法get_id()但这并不像整数那样表示整数值。该对象确实有一个thread_data成员,其中包含一个似乎是我想要的id,但该数据成员是私有(private)的,因此无法访问。为了显示或识别目的访问线程id的boost方式是什么? 最佳答案 为时已晚,但对于寻找答案的用户,boost允许按照您所说的查询线程id,只需调用以下方法:boost