我正在尝试使用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;
}
当我执行此程序时,有时它会起作用,有时不起作用(我得到一条消息&#34; R6010 - abort()已被调用&#34;)。
当我调试时,代码可用的最后一个函数调用是set_thread,错误位于第202行。
我注意到当我减少或删除计时器时,它更容易崩溃。
由于这段代码非常简单,我必须在原则上遗漏一些东西。 我做错了什么?
感谢您的帮助
答案 0 :(得分:2)
文件ctpl_stl.h已在项目网站上修复。尝试使用新版本(0.0.2)而不是旧版本。它应该工作,它适用于我。
ctpl_stl.h是作为ctpl.h的修改而创建的,以方便那些不想依赖BOOST lockfree库的用户。 ctpl.h是一个更好的选择,它经过了很好的测试,应该更有效率。