问题标签 [boost-thread]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
4084 浏览

c++ - Boost.Thread 在 VS2010 中抛出 bad_alloc 异常

包括在内后,<boost/thread.hpp>我得到了这个例外:

我无法捕捉到它,在内存位置中断将我带到 kernel32.dll,此时我无法说出发生了什么,但似乎在程序结束后抛出异常并且 VS 能够捕捉它。

测试用例:

编译器命令行:
/I"I:\SophisPal\boost-1_43_0-vc10-32\include\boost-1_43" /Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm- /EHsc /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Release\Client.pch" /Fa"Release\" /Fo"Release\" /Fd"Release\vc100.pdb" /Gd /analyze- /errorReport:queue

链接器命令行:
/OUT:"C:\Documents and Settings\user\my documents\visual studio 2010\Projects\CSF\Release\Client.exe" /INCREMENTAL:NO /NOLOGO "I:\SophisPal\boost-1_43_0-vc10-32\lib\libboost_system-vc100-mt-1_43.lib" "I:\SophisPal\boost-1_43_0-vc10-32\lib\libboost_date_time-vc100-mt-1_43.lib" "I:\SophisPal\boost-1_43_0-vc10-32\lib\libboost_regex-vc100-mt-1_43.lib" "I:\SophisPal\boost-1_43_0-vc10-32\lib\libboost_thread-vc100-mt-1_43.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MANIFEST /ManifestFile:"Release\Client.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Documents and Settings\user\my documents\visual studio 2010\Projects\CSF\Release\Client.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /PGD:"C:\Documents and Settings\user\my documents\visual studio 2010\Projects\CSF\Release\Client.pgd" /LTCG /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE

0 投票
4 回答
3018 浏览

c++ - 线程如何在完成时发出信号?

为什么上面程序的输出是:

开始..
酷,它正在运行。
dostuff 开始 4
dostuff 已完成 正在运行的东西
还在运行吗?为什么

dostuff 完成后如何正确标记?我不想坐等它,我只想在它完成时得到通知。

0 投票
2 回答
5574 浏览

c++ - 信号和线程——好的或坏的设计决策?

我必须编写一个执行高度计算密集型计算的程序。该程序可能会运行几天。计算可以很容易地在不同的线程中分离,而不需要共享数据。我想要通知我当前状态的 GUI 或 Web 服务。

我当前的设计使用 BOOST::signals2 和 BOOST::thread。它编译并且到目前为止按预期工作。如果一个线程完成了一次迭代并且有新数据可用,它会调用一个连接到 GUI 类中的插槽的信号。

我的问题:

  • 这种信号和线程的组合是一个明智的想法吗?我另一个论坛有人建议其他人不要“走这条路”。
  • 附近是否有我没有看到的潜在致命陷阱?
  • 我的期望是否现实,使用我的 GUI 类来提供 Web 界面或 QT、VTK 或任何窗口将是“容易的”?
  • 是否有我忽略的更聪明的替代方案(如其他提升库)?

以下代码编译为

代码如下:

0 投票
2 回答
24357 浏览

ubuntu - Boost.Thread 链接 - boost_thread 与 boost_thread-mt

我不清楚Boost.Thread 1.34.1库有哪些链接选项。我在 Ubuntu 8.04 上,我发现在使用任何一个boost_threadboost_thread-mt在链接编译和运行期间,但我没有在上面的链接中看到关于这些或任何其他链接选项的任何文档。

有哪些 Boost.Thread 链接选项可用,它们是什么意思?

0 投票
1 回答
1339 浏览

c++ - boost::threads - 如何优雅关机?

我试图通过使用 boost:threads 而不是我们自己的 Win32 线程包装器来提高 C++ 应用程序的可移植性,优雅的线程终止问题(再次)引起了它的丑陋。

在纯 win32 上,我通过使用QueueUserAPC来“中断”线程以引发“thread_interrupt”异常,该异常会导致所有 RAII 对象在退出时被清理,如此处所述。任何“可提醒”的操作系统功能都可以通过这种方式中断,因此互斥等待、睡眠、串行和套接字 I/O 等都是可能的中断点。

但是,boost:mutexes 等在 win32 上的 QueueUserAPC 不是“可提醒的”——它们调用诸如 Sleep(n) 之类的东西,而不是 SleepEx(n, true))

Boost 线程确实具有“中断”机制(类似地涉及抛出异常),但它似乎有一个缺点,即只有 boost::thread 调用是可中断的,因此第三方套接字库(例如)不能被中断。

该怎么办?我可以在本地修改增强源以使其可中断,但这感觉是一个糟糕的选择,我认为这对可移植性没有帮助。重新设计整个应用程序以消除对正常线程关闭的要求是一个同样没有吸引力的路线......

0 投票
1 回答
510 浏览

c++ - 关于 Boost::Python 和 Boost::Threads 的问题

我和一个朋友正在开发一个使用 Boost::Python 的应用程序。我在 C++ 中定义了一个接口(也是一个纯虚拟类),通过 Boost::Python 向用户公开,用户必须从它继承并创建一个类,应用程序采用该类并将其用于某些回调机制。

到目前为止,一切都很顺利。现在,函数回调可能需要一些时间(用户可能编写了一些繁重的东西)......但是我们需要重新绘制窗口,所以它看起来不会“卡住”。我们想为此使用 Boost::Thread . 一次只会运行一个回调(没有其他线程会同时调用 python),所以我们认为这不会是一个很大的问题......因为我们不使用 python 内部的线程,也不在为 python 包装的 C++ 代码。

我们所做的是在 Py_Initialize() 之后调用 PyEval_InitThreads(),然后,在它自己的 boost 线程中调用函数回调之前,我们使用宏 PY_BEGIN_ALLOW_THREADS 和,以及当线程结束时使用宏 PY_END_ALLOW_THREADS。

我想我不需要说执行永远不会到达第二个宏。每次运行时都会显示几个错误......但总是在调用实际回调时出现。我用谷歌搜索了很多,甚至阅读了一些关于线程的 PEP 文档,但他们都在谈论 python 模块中的线程(我不认为它只是一个暴露的纯虚拟类)或 python 中的线程,而不是关于主应用程序从多个线程调用 Python。

请帮忙,这让我沮丧了几个小时。

附言。帮助!

0 投票
3 回答
1781 浏览

c++ - 同步访问返回值

考虑以下 C++ 成员函数:

这里的目的不是同步对私有成员变量的访问m_size,而是确保调用者收到 m_size 的有效值。目标是防止函数m_size在其他线程正在修改的同时返回m_size

但是调用这个函数是否有任何潜在的竞争条件?我不确定这里的 RAII 样式锁是否足以防止竞争条件。假设在函数的返回值被压入堆栈之前调用了锁的析构函数?

我是否需要执行以下操作来保证线程安全?

0 投票
3 回答
2001 浏览

c++ - 如何在 C++ 中实现交换器(集合模式)?

在 Java 中,有一个 Exchanger 类(https://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Exchanger.html)。如何在 C++ 中实现类似的东西(使用 boost)?

0 投票
2 回答
276 浏览

c++ - 随机无限线程和各种错误,同时并行逐行读/写

我想基于boost::thread逐行实现并行读-处理-写,但当前版本行为不定:下面的测试通过填充读取(并发)队列来读取一个CSV文件,该队列被简单地传输到要写入输出文件的写入队列(暂时不处理)。

遇到的问题:

  • 在 Windows 和 Unix 上,程序随机永远不会结束(~3/5 次),并生成一个 SIGSEGV(~1/100)
  • 在 Unix 上,有很多错误:创建线程时出现 SIGABRT,创建后“内存在分配块之前被破坏”(-> SIGABRT 也是如此),随机在 1 到 ~15 行之间。

我讨厌给出问题和代码并让其他人回答(我有时会站在你这边),但相信我,我想不出任何其他方法来纠正它(处理线程,调试是一场噩梦) ,所以我提前道歉。这里是 :

主要.cpp:

io.hpp:

io.cpp:

线程.hpp:

这个项目很重要,如果您能帮助我,我将不胜感激 =)

预先感谢。

问候,

密斯泰尔先生。

0 投票
5 回答
7598 浏览

c++ - BOOST:递归shared_mutex?

似乎 Boost 的 shared_mutex 是非递归的.. 反正有这个吗?(没有重新实现整个东西)