Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 手动清理boost::thread中特定于线程的资源_C++_Multithreading_Boost_C++ Cli_Thread Local Storage - Fatal编程技术网

C++ 手动清理boost::thread中特定于线程的资源

C++ 手动清理boost::thread中特定于线程的资源,c++,multithreading,boost,c++-cli,thread-local-storage,C++,Multithreading,Boost,C++ Cli,Thread Local Storage,boost线程静态库不能与C++/CLI代码一起使用,因为它使用线程本地存储回调来清理特定于线程的数据。在构建boost库时,可以通过排除tss_pe.obj来禁用这些回调,这允许在托管代码中使用库,但意味着需要手动清理这些资源 这些都没有正式的文档记录,但我从各种bug/论坛帖子(例如)中拼凑出了这一手动清理需要的: 当退出“非由boost::thread管理”的线程时,调用_thread_exit()。我不清楚这到底意味着什么,或者为什么boost thread会负责清理它未管理的线程的资

boost线程静态库不能与C++/CLI代码一起使用,因为它使用线程本地存储回调来清理特定于线程的数据。在构建boost库时,可以通过排除tss_pe.obj来禁用这些回调,这允许在托管代码中使用库,但意味着需要手动清理这些资源

这些都没有正式的文档记录,但我从各种bug/论坛帖子(例如)中拼凑出了这一手动清理需要的:

  • 当退出“非由boost::thread管理”的线程时,调用_thread_exit()。我不清楚这到底意味着什么,或者为什么boost thread会负责清理它未管理的线程的资源
  • 也可能在main()的开头和结尾调用\u进程\u enter和\u进程\u exit
作为该库的新用户,我以前从未使用过线程本地存储,我想确保我完全理解这些简洁的指南。我将使用COM DLL中非托管代码中的boost线程,该COM DLL还包含两个托管类


有人能提供一个更详细的解释,并举例说明我需要调用上述函数以避免在禁用自动清理时泄漏资源的确切情况吗

>由于您似乎正在创建COM组件,而不是修补代码< > Boo::线程< /代码>,我建议使用VisualC++(V110)标准库实现的…不幸的是,由于无关的原因,我使用Visual Studio 2008卡住了,所以我不能使用C++ 11线程特性。将项目分为托管部分和非托管部分,并仅通过二进制安全API进行通信。在非托管部件中随意使用
boost::thread
,在托管部件中仅使用.NET线程API。。。