草庐IT

thread_name

全部标签

c++ - boost::threads - 如何正常关机?

我正在尝试通过使用boost:threads而不是我们自己的Win32线程包装器来提高C++应用程序的可移植性,而优雅的线程终止问题(再次)又浮出水面。在纯win32上,我使用QueueUserAPC来“中断”线程抛出一个“thread_interrupt”异常,导致所有RAII对象在退出时被清理,asdescribedhere.任何“可警报”操作系统功能都可以通过这种方式中断,因此互斥等待、sleep、串行和套接字I/O等都是可能的中断点。但是,boost:mutexes等在win32上不会被QueueUserAPC“警告”——它们调用诸如Sleep(n)而不是SleepEx(n,t

c++ - 振奋 spirit : What type names should be used for the built in terminals?

我正在重构一个类型系统(类型模型),它使用spirit进行字符串序列化。我正在使用类型特征的编译时建模构造。templatetype_traits{typedefboost::spirit::qi::int_parserstring_parser;}templatetype_traits{typedefboost::spirit::ascii::stringstring_parser;}在这个例子中,我展示了原始解析器,但我希望也加入规则。int4类型有效,但这是因为(home/qi/numeric/int.hpp+27):namespacetag{templatestructint_

c++ - 使用线程池进行模拟: boost-thread and boost-asio

我想使用boost::asio来设置线程池。我的问题是:如何将特定数据附加到创建的每个线程,以及如何管理单独的输出?更具体地说,我编写了一个类Simulation,它通过一种在输入中获取一些参数的方法来执行模拟。该类包含计算所需的所有数据。由于数据不是太大,我想复制它以便在池的每个线程中使用类Simulation的不同实例。我想做这样的事情:(这里解释了如何设置线程池:SO和Asiorecipes)classParallelSimulation{public:staticconststd::size_tN=10;protected:std::vector>simuInst;//Ncop

c++ - 内存屏障 : How to ensure initialization writes are seen by worker threads?

我对使用内存屏障/栅栏进行编程还很陌生,我想知道我们如何才能保证设置写入在随后在其他CPU上运行的辅助函数中可见。例如,请考虑以下内容:intsetup,sheep;voidSetupSheep()://RunonceCPU1:setup=0;...muchlaterCPU1:sheep=9;CPU1:std::atomic_thread_fence(std::memory_order_release);CPU1:setup=1;之后运行(不是并发),很多很多次:voidManipulateSheep():CPU2:intmySetup=setup;CPU2:std::atomic_t

c++ - 使用 native_handle() + pthread_cancel() 取消 std::thread

我正在将之前围绕pthreads的线程包装器转换为std::thread。但是c++11没有办法取消线程。尽管如此,我还是需要取消线程,因为它们可能正在外部库中执行非常冗长的任务。我正在考虑在我的平台中使用给我pthread_id的native_handle。我在Linux(Ubuntu12.10)中使用gcc4.7。这个想法是:#include#include#includeusingnamespacestd;intmain(intargc,char**argv){cout线程被pthreads抛出的异常取消。我的问题是:这种做法会不会有什么问题(除了不可移植)?

c++ - CLOCK_THREAD_CPUTIME_ID 在 MacOS 上

我有一个要从Linux移植到MacOSX的函数,它使用带有CLOCK_THREAD_CPUTIME_ID的clock_gettime来测量在进程上花费的时间。我在Internet上找到了这段代码,它可以给我相当于CLOCK_REALTIME的代码:#ifdef__MACH__//OSXdoesnothaveclock_gettime,useclock_get_timeclock_serv_tcclock;mach_timespec_tts;host_get_clock_service(mach_host_self(),CALENDAR_CLOCK,&cclock);clock_get_

c++ - boost::thread 应该在无限循环中运行并等待没有互斥量的新输入

我有三个线程,我想一直运行到无限循环。线程对具有状态的对象进行操作,每个线程根据对象的状态执行或休眠。我希望输入线程继续检查state=1的任何新对象并继续处理它,或者等待它。classmyclass{intstate;myclass(){this->state=0;}voidsetState(intx){//setthis->statetox}intgetState(){//returnthis->state}//stuff}voidfoo1(myclass*ob){//stuffwhile(ob->getState()!=0||ob->getState()!=1){//sleepf

python - c++中python "type(<name>, <bases>, <dict>)"的等价物是什么?

好吧,我正在将python3.3嵌入到C++应用程序中。我希望在C++端动态创建一个Python类,就像我在Python中执行以下操作一样:my_type=type("MyType",(object,),dict())我知道我总是可以导入“builtins”模块,但我一般会尽量避免在C++端导入。谢谢! 最佳答案 以下似乎工作得很好:PyObject*type(constchar*name,boost::python::tuplebases,boost::python::dictdict){returnPyType_Type.tp_

c++ - 带有类参数的 std::thread 初始化导致类对象被多次复制

看起来,如果创建一个类的对象,并将其传递给std::thread初始化构造函数,那么类对象的构造和销毁总共有4次之多。我的问题是:你能一步步解释这个程序的输出吗?为什么这个类在这个过程中被构造、复制构造和销毁了这么多次?示例程序:#include#include#include#includeclasssampleClass{public:intx=rand()%100;sampleClass(){std::cout输出是:constructorcalled,x=92copyconstructorcalled,x=36copyconstructorcalled,x=61destruct

javascript - 在 Node.js 插件中使用 std::thread

想象一下,我使用来self的Node.js插件的同步函数:varcheck_ok=addon.my_function(parameters);varfinal_results=addon.final_function(parameters);但是在方法代码中我有:std::threadt[10];//Global//...voidmy_function(constFunctionCallbackInfo&args){//....t[0]=thread(random_void_function,[parameters])t[1]=thread(random_void_function_2