C++创建线程池(如java)

C++创建线程池(如java),c++,threadpool,C++,Threadpool,我遇到了一个问题,我正在编写一个反黑客程序,但我不知道如何像java中的ThreadPool那样每x次重复一个函数。 我是这样想的: while(true) { //Bad Procces its def before if(badprocces()) ExitApplication(1); } //Other code there while(true) { //Bad Procces its def before if(badprocces())

我遇到了一个问题,我正在编写一个反黑客程序,但我不知道如何像java中的ThreadPool那样每x次重复一个函数。 我是这样想的:

while(true)
{
    //Bad Procces its def before
    if(badprocces())
        ExitApplication(1);
}
//Other code there
while(true)
{
//Bad Procces its def before
    if(badprocces())
        ExitApplication(1);
    if(anotherCheck())
        ExitApplication(1);
}
但是另一个代码不能运行,因为while不允许它

否则我会这样想:

while(true)
{
    //Bad Procces its def before
    if(badprocces())
        ExitApplication(1);
}
//Other code there
while(true)
{
//Bad Procces its def before
    if(badprocces())
        ExitApplication(1);
    if(anotherCheck())
        ExitApplication(1);
}
但我想这不是最好的办法

这是可能的吗?像在java中一样创建调用线程池。 如何?哪个例子更好 另一个解决方案?更好的例子

好了,就这些。
感谢您的阅读和回复。

如果您想要一个类似计时器的程序,您可以像这样轻松制作,但是我会将它封装在一个类中

std::atomic_bool go(true);

std::thread t([&](){
     while(go){
         do_work();
         //wait (create a timer basically)
         std::this_thread::sleep_for( std::chrono::milliseconds(5) );
     }
});

//do stuff (or wait for user input)
go=false;
t.join();
如果您没有C++11支持,那么可以将boost替代方案用于lambdas

我不确定自动变量是否严格必要


应该注意的是,这不是一个线程池,而是一个使用wait循环的单个线程。

如果您想要一个类似计时器的程序,您可以这样轻松地实现它,但是我会将它封装在一个类中

std::atomic_bool go(true);

std::thread t([&](){
     while(go){
         do_work();
         //wait (create a timer basically)
         std::this_thread::sleep_for( std::chrono::milliseconds(5) );
     }
});

//do stuff (or wait for user input)
go=false;
t.join();
如果您没有C++11支持,那么可以将boost替代方案用于lambdas

我不确定自动变量是否严格必要


应该注意的是,这不是一个线程池,而是一个循环等待的单个线程。

我完全不相信这个特定问题实际上需要一个线程池。。。 ... 但如果你想要一个,我鼓励你看看这个图书馆:

一些一般的经验法则:

如果你没有一个明确定义的任务,比如处理互联网下载,那么就不要使用线程

如果您可以阻止挂起直到某个事件发生,而不是在睡眠/检查循环中循环,则可以阻止。投票是邪恶的。阻塞是好的

你想要一个线程池的唯一原因是如果你希望很多小任务快速、随机地来来去去去。线程池的唯一真正优点是,通过将现有线程重新用于新任务,避免了创建和销毁线程的开销。在大多数情况下,通过简单地根据需要创建线程来简化代码的好处远远大于设置、管理和使用线程池的好处


我怎么…

我一点也不相信这个特定的问题实际上需要一个线程池。。。 ... 但如果你想要一个,我鼓励你看看这个图书馆:

一些一般的经验法则:

如果你没有一个明确定义的任务,比如处理互联网下载,那么就不要使用线程

如果您可以阻止挂起直到某个事件发生,而不是在睡眠/检查循环中循环,则可以阻止。投票是邪恶的。阻塞是好的

你想要一个线程池的唯一原因是如果你希望很多小任务快速、随机地来来去去去。线程池的唯一真正优点是,通过将现有线程重新用于新任务,避免了创建和销毁线程的开销。在大多数情况下,通过简单地根据需要创建线程来简化代码的好处远远大于设置、管理和使用线程池的好处

我想