stdthread相关内容
以下示例在 Ubuntu 12.04 上使用 Clang 3.2 或 GCC 4.7 编译时成功运行(即不会挂起),但如果我使用 VS11 Beta 或 VS2012 RC 编译则挂起. #include #include #include #include "boost/thread/thread.hpp"无效睡眠(整数毫秒){std::this_thread::sleep_for(std::
..
我正在构建一个实时软件,其中我在 main() 和用于读取和处理数据的线程上有一个主要的无限循环. 其中一个问题是保持运行线程的 std::vector 以向它们发送信号并监视执行.所以我把这段代码放在一起: #include #include #include #include #include 命名空间 readerThread {无效开始(int id){而 (1){
..
示例如下: #include#include使用命名空间标准;void f1(double& ret) {ret=5.;}void f2(double* ret) {*ret=5.;}int main() {双 ret=0.;线程 t1(f1, ret);t1.join();cout
..
如何检查 std::thread 是否仍在运行(以独立于平台的方式)?它缺少 timed_join() 方法,而 joinable() 并不适用于此. 我想过在线程中用std::lock_guard锁定一个互斥锁,并使用互斥锁的try_lock()方法来判断它是否仍然被锁定(线程正在运行),但对我来说似乎不必要地复杂. 你知道更优雅的方法吗? 更新: 明确地说:我想检查线程是否干
..
好吧,我在使用 std::thread 将数据传递到线程时遇到了问题.我以为我了解复制构造函数等的一般语义,但似乎我不太明白这个问题.我有一个名为 Log 的简单类,它因此隐藏了它的复制构造函数: 类日志{民众:Log(const char filename[], const bool outputToConsole = false);虚拟〜日志(无效);//修改行为void appendStr
..
为什么在创建 std::thread 时不能通过引用传递对象? 例如下面的代码段给出了一个编译错误: #include #include 使用命名空间标准;static void SimpleThread(int& a)//编译错误//static void SimpleThread(int a)//OK{cout
..
假设我正在启动一个 std::thread 然后 detach() 它,所以即使 std::thread 曾经代表它,超出了范围. 进一步假设程序没有可靠的加入分离线程的协议1,所以当main()退出时分离线程仍然运行. 我在标准中找不到任何内容(更准确地说,在 N3797 C++14 草案中),它描述了应该发生的情况,1.10 和 30.3 都没有包含相关的措辞. 1 另一个可
..
1) 我是 std::thread 的新手,我想知道调用 pthread_sigmask() 以阻止特定 中的某些信号是否是一个好习惯strong> 由 std::thread 创建的线程. 我不希望新线程接收SIGTERM、SIGHUP等信号,因为主进程已经为这些信号安装了处理程序. 那么,调用 pthread_sigmask() 来阻塞由 std::thread 创建的线程中的一些
..
我有一个Windows c ++ dll,该文件由第三方程序加载.我最近添加了一个线程池(这个 https://github.com/progschj/ThreadPool/blob/master/ThreadPool.h ). 但是,当第三方程序不再需要该dll时,该dll将不再被卸载.原因是线程池中产生的每个线程都会将dll引用计数增加一.一个问题是我不知道第三方程序何时不再需要该dll
..
我正在学习 std :: mutex , std :: thread ,而我对下面2条代码的不同行为感到惊讶: #include#include#include使用命名空间std;std :: mutex mtx;无效foo(int k){std :: lock_guardlg {mtx};对于(int i
..
如果一个函数具有非无效的返回值,而我使用 .join 函数将其加入,那么有什么方法可以检索它的返回值? 这是一个简化的示例: float myfunc(int k){返回exp(k);}int main(){std :: thread th = std :: thread(myfunc,10);th.join();//返回值在哪里?} 解决方案 您可以按照以下示例代码从线程获取返回
..
尝试从标准模板库编译具有多线程的程序时遇到一些麻烦.当我尝试编译以下程序时,它返回给我一个晦涩的错误: #include#include无效foo(){std :: cout
..
我正在为台式机创建UI抽象层.现在,我正在实现.NET框架的功能.令人讨厌的事情是,如果我让用户在Visual Studio中创建CLR Windows窗体应用程序,则他们将无法使用所有标准库,例如 std :: thread ,并且如果我让他们创建另一种类型的应用程序,,控制台就会显示出来. 是否可以将 clr 与 std :: thread 一起使用,或者甚至更好的是,有一种方法可以防止
..
我最近发现使用std::thread和dlopen的奇怪行为. 基本上,当我在使用dlopen加载的库中执行std::thread时,会收到一个sigsev.库本身与pthread链接,而调用dlopen的可执行文件则不是. 一旦我将可执行文件链接到pthread或库本身,一切正常.但是,我们使用的是基于插件的基础结构,在该基础结构中,我们不知道应用程序本身是否与pthread链接在一
..
我正在运行Ubuntu 14.04。 我复制的步骤: 创建一个新的C ++项目(新建-> C ++-> Hello World项目),我将其称为 TestStdThread 将主文件中的代码更改为此: #include #include int main(){ std :: cout
..
我的目标是保留 std :: thread 对象作为数据成员,并在需要时对其进行初始化。 我无法这样做(如下面的代码所示)是因为 std :: thread 类的副本构造函数被删除了。还有其他方法吗? class MyClass { public: MyClass():DiskJobThread(){}; 〜MyClass(); void DoDiskJobThre
..
我有一个线程程序,必须在多台计算机上运行。它们每个都有不同数量的受支持线程。在我开发程序的计算机中,有4个线程,因此我对要创建的4个线程进行了硬编码。我想使这种情况因情况而异。我想使用std :: thread :: hardware_concurrency来获取线程数,并将工作划分为可用的线程数。这可能吗 ? 创建的硬编码线程是: // const无符号int SIZE = std
..
我想在我的类/结构中创建一个线程对象,但是不想在声明期间立即初始化。 Intead希望稍后再做。因此,如下面的代码片段所示,我收到了此编译错误。我该如何解决? 错误C2280:'std :: thread :: thread(const std :: thread&)':尝试 引用已删除的函数 我观察到导致此错误的行是: std :: thread t2;
..
我对新的c ++ 11 rvalue进行了很多研究,并沿用了lvalue。 以下是我发现并阅读的内容的示例: how-stdthread-constructor-detects-rvalue-reference stdthread-and-rvalue-reference 我也向我简要介绍了右值引用 运动语义 rvalue_references 添加对C ++
..
我正在尝试形成一种std :: thread形式,该形式将包装器封装在该线程中执行的代码周围。不幸的是,由于我不太了解rvalues和我尝试传递的 Function 模板化类型,因此我无法编译它。这是我的代码: #include #include #include void Simple2(int a,int b){}
..