草庐IT

thread_safe

全部标签

c++ - boost::thread 变量的前向声明

有人可以告诉我我们可以转发声明一个boost::thread变量吗?boost::线程t(线程);启动一个线程,但我想在某处声明它并在其他地方启动它。提前谢谢。当我使用boost::threadt;t=boost::thread(thread);/usr/include/boost/noncopyable.hpp:Incopyconstructor‘boost::thread::thread(constboost::thread&)’:/usr/include/boost/noncopyable.hpp:27:error:‘boost::noncopyable_::noncopyabl

c++ - 提升 : is it safe to use multiple recursion in async calls?

我是asio框架的新手,所以请多多关照。我调查了几个boostasio示例,发现人们使用这样的异步调用:voidread(){async_read(socket_,boost::asio::buffer(&user_[0],user_.size()),boost::bind(&Connection::handle_user_read,this,placeholders::error,placeholders::bytes_transferred));}voidhandle_user_read(...){...read();...}我认为这段代码不安全,因为它使用了多重递归。所以当因为调

c++ - "Safely"在按键时终止正在运行的 C++ 程序?

我正在尝试编写一个模拟程序,它将继续运行直到我按下某个键(例如“q”表示退出)。然后在我按下它之后,我希望程序完成写入其当前写入的数据,关闭文件,然后优雅地退出(而不是仅按ctrl+c强制程序停止)。有什么办法可以在C++上执行此操作吗?谢谢 最佳答案 让用户按下CTRL-C,但安装一个信号处理程序来处理它。在信号处理程序中,设置一个全局bool变量,例如user_wants_to_quit。然后你的sim循环看起来像:while(work_to_be_done&&!user_wants_to_quit){…}//Loopexite

c++ - 究竟什么时候初始化在全局范围内声明的 thread_local 变量?

例如:#includethread_localintn=1;voidf(){++n;//isninitializedhereforeachthreadorpriortoenteringf()?}intmain(){std::threadta(f);std::threadtb(f);ta.join();tb.join();}从here还不完全清楚n什么时候初始化。 最佳答案 足够简单,并且完全符合规范。n将在新线程运行时被初始化-在您输入任何线程特定的函数之前。准确的说是要初始化3次 关于

c++ - 如何终止 std::thread?

我目前正在开发一个程序,需要从socket服务器下载一些图片,下载工作会执行很长时间。因此,我创建了一个新的std::thread来执行此操作。下载完成后,std::thread会调用当前类的一个成员函数,但这个类很可能已经被释放了。所以,我得到了一个异常(exception)。如何解决这个问题?voidxxx::fun1(){...}voidxxx::downloadImg(){...alongtimeif(downloadComplete){this->fun1();}}voidxxx::mainProcees(){std::thread*th=newthread(mem_fn(&

c++ - 为什么 std::atomic_thread_fence 有 "C"链接?

我猜不出为什么这个函数需要“C”而不是“C++”链接。 最佳答案 由LWGissue1479添加这是针对C++11的最后一分钟评论。此更改的基本原理是C语言兼容性(C11线程库在stdatomic.h中具有同名函数atomic_thread_fence)。据我所知,C和C++原子库可以共存一直是一个计划:其他兼容性示例是std::atomic的C兼容类型别名,例如atomic_int和C兼容性宏ATOMIC_VAR_INIT 关于c++-为什么std::atomic_thread_fen

c++ - 并行使用 std::thread?

我是std::thread的新手,我尝试编写一个parallel_for。我编写了以下代码://parallel_for.cpp//compilation:g++-O3-std=c++0xparallel_for.cpp-oparallel_for-lpthread//execution:time./parallel_for10050000000//(100:numberofthreads,50000000:vectorsize)#include#include#include#include#include#include#include#include#include//Paral

c++ - 十进制值:cout << dec << boost::this_thread::get_id()

是否可以用十进制或八进制格式计算thread::id?std::cout我总是得到十六进制,例如0xdf08。 最佳答案 您应该能够使用标准I/O操纵器指定您想要的输出格式:#include//...std::cout但是,请注意thread::id不需要是数字。此外,它可能是一个数字,但可能以不同于将该数字插入std::cout的方式打印到标准输出。.C++11标准规范operator的重载接受std::thread::id(我假设它的行为类似于Boost对boost::thread::it的对应重载),说:[...]Insert

c++ - C++11 thread_local 变量可以从父线程继承它的初始值吗?

我想要一个thread_local变量来更改应用于我的应用程序的每个线程的日志记录级别。像这样:enumclasstrace_level{none,error,warning,log,debug,verbose};staticthread_localtrace_levelmin_level=trace_level::log;应用程序启动时主线程的默认值应该是trace_level::log,但是如果在启动其他线程之前改变它,那么我希望子线程从当前开始parent的值(value)。有没有办法使用thread_local变量来做到这一点?由于此代码隐藏在库中,因此无法在每个线程开始时手动

iphone - NSURLConnection 发送异步请求 : Blocking Main Thread

我正在使用NSURLConnection发出多个异步请求。我想显示一个进度指示器,以显示要执行的总数中已完成的请求数。但是,当我尝试在发出请求之前或在执行请求之前调用的另一个方法中设置和显示此进度指示器时,它不会显示。当请求被注释掉时,进度指示器显示正常。但如果不是,就好像Xcode向前看并看到异步请求到来并阻塞主线程,从而使UI更改变得不可能。下面是被调用的相关代码,包括请求和显示进度指示器的代码:-(void)getRegionalInformationFromChecked:(NSSet*)setatIndex:(NSInteger)index{__blockBOOLrespon