【问题标题】:Exception error using C++ Thread Pool Library (CTPL)使用 C++ 线程池库 (CTPL) 的异常错误
【发布时间】:2015-08-27 00:44:43
【问题描述】:

我正在尝试使用 C++ Thread Pool Library (CTPL),它令人愉快地包含在单个 header file 中。

为此,我创建了一个非常简单的测试程序。这是代码:

#include <iostream>
#include "ctpl_stl.h"

void myFunction(int threadID_0)
{ 
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
}

int main()
{
    ctpl::thread_pool p(2); // We create the pool with 2 threads

    p.push(myFunction);     // We add work
    p.push(myFunction);
    p.push(myFunction);
    p.push(myFunction);
    p.push(myFunction);
    p.push(myFunction);
    p.push(myFunction);
    p.push(myFunction);
    p.push(myFunction);

    p.stop(true);           // We wait for all the tasks to be performed

    return 0;
}

当我执行这个程序时,有时它可以工作,有时不能(我收到一条消息“R6010 - abort() 已被调用”)。

当我调试时,代码可用的最后一个函数调用是set_thread,错误在202行。

我注意到,当我减少或删除计时器时,它更容易崩溃。

由于这段代码很简单,我一定在原理上漏掉了一些东西。 我做错了什么?

感谢您的帮助

【问题讨论】:

  • abort() 可能由于未捕获的投掷而被调用。如果是这样,请找出抛出对象的类型,如果是异常,则获取消息。
  • 我注意到样本没有调用stop - 只是观察
  • 您是否设法重现错误以做出此声明 Doctorlove ?无论如何你是对的,它在调用停止之前崩溃。而且我无法捕捉到异常。
  • 我指的是 github 上的示例代码——不是这段代码。
  • 好的,但是在主函数结束时线程池的析构函数实际上并没有调用停止。这个样本不是很清楚。

标签: c++ multithreading exception visual-studio-2013 threadpool


【解决方案1】:

文件 ctpl_stl.h 已固定在项目网站上。尝试新版本 (0.0.2) 而不是旧版本。它应该有效,它适用于我。

ctpl_stl.h 是作为 ctpl.h 的修改创建的,以方便不想依赖 BOOST 无锁库的用户。 ctpl.h 是一个更好的选择,它经过了很好的测试并且应该更高效。

【讨论】:

  • 非常感谢您的回答,您的速度非常快!
猜你喜欢
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多