- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有一个线程池,它允许动态调整大小并使用任务范例。我想知道 - 当人们得到这样的东西时,他们会完全停止手动创建线程并一直使用任务吗?那么在我的类中仅使用线程池\任务执行器来创建线程是否很常见?
my thread pool基于 boost::asio::io_service并与 boost::packaged_task 一起工作.它只是 header ,拥有 boost 1.47.0,它工作所需的全部是 timer , my costume thread_group和 thread_pool类(class)。开发这么小的东西很有趣,但现在我陷入了困境。
我的任务构造如下:
boost::shared_ptr< boost::packaged_task<int> > task(new boost::packaged_task<int>( boost::bind(calculate_the_answer_to_life_the_universe_and_everything, argument_int_value )));
如果我想创建一个函数来返回任何东西,并且在其中有一些再次运行的计时器(例如文件索引器,如果用户在其中创建了任何新文件,则需要每 5 秒检查一次)一些文件夹)
所以例如我会:
void infinite_thread()
{
while(true)
{
timerForCaptureFame.restart();
do_stuff();
spendedTimeForCaptureFame = (int64_t)timerForCaptureFame.elapsed();
if (spendedTimeForCaptureFame < desiredTimeForCaptureFame)
boost::this_thread::sleep(boost::posix_time::milliseconds(desiredTimeForCaptureFame - spendedTimeForCaptureFame));
}
}
我会简单地将这个包装器创建到新线程中,代码如下
boost::thread workerThread(infinite_thread);
但现在我可以有任务所以它可以变成
boost::shared_ptr< boost::packaged_task<void> > task(new boost::packaged_task<void>(infinite_thread));
task_manager->post<void>(task);
我的任务管理器在经过一小段时间后会发现该线程不会自行关闭,并且通常会向其自身添加新线程以执行以保持该线程正常工作。
所以我真的很想知道是否通常的做法是让 thread_pool/task_pool 仅使用它(例如每个类一个)来创建线程,或者人们将任务与“纯”线程混合在一起?
最佳答案
没有明确的答案。可能有些事情看起来更适合常规线程,但不太适合 task 范例,例如需要在整个程序持续时间内持续运行的线程,或者可能比线程池更长寿的线程.如果它永远不会被带回池中,那么您不妨将它作为一个单独的事物来处理。
话又说回来,因为你已经有了线程池,你可能希望强制所有线程成为任务,即使它们是无限长的任务......但是当心 law of the instrument .似乎每项工作都是您的新游泳池/金锤子的任务/钉子。
关于c++ - 所以我给自己弄了一个线程池任务管理器系统。我应该从现在开始只使用它来创建所有线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7240040/
我是一名优秀的程序员,十分优秀!