C ++ Создать ThreadPool (как Java) - PullRequest
       2

C ++ Создать ThreadPool (как Java)

1 голос
/ 27 февраля 2012

У меня проблема, я программирую антихакерскую программу, но у меня нет идеи, как повторять функцию каждый раз, как ThreadPool в Java. Я думаю что-то подобное:

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);
}

Но я думаю, это не лучший способ.

Это возможно? (Создайте вызов ThreadPool как в Java). Как? (С примером лучше) Другое решение? (Лучше с примерами)

Хорошо, это все. Спасибо за прочтение и за ответ.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

Если вам нужна программа, подобная таймеру, вы можете легко ее сделать, но я бы инкапсулировал ее в класс.

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, вы можете использовать альтернативные варианты с лямбдами.

Я не уверен, строго ли необходима автоматическая переменная.

Следует отметить, что это не пул потоков, а отдельный поток, который зацикливается с ожиданием.

1 голос
/ 27 февраля 2012

Я совсем не уверен, что этой конкретной проблеме на самом деле нужен пул потоков ... ... но если вы хотите, я рекомендую вам взглянуть на эту библиотеку:

Некоторые общие эмпирические правила:

  • Если у вас нет четко определенной задачи, пригодной для потоков(например, например, для обработки загрузки через Интернет), затем не используйте потоки.

  • Если вы можете заблокировать («приостановить» до некоторого «события») вместо того, чтобы ездить вцикл "сон / проверка", затем блокировка.Опрос это зло.Блокировка - это хорошо.

  • Единственная причина, по которой вы хотите создать «пул потоков», заключается в том, что вы ожидаете, что множество небольших задач быстро, случайно приходят и уходят.Преимущество (AFAIK only реальное преимущество) «пула потоков» состоит в том, чтобы избежать накладных расходов на создание и уничтожение потоков (путем повторного использования существующих потоков для новых задач).В большинстве сценариев преимущества упрощения вашего кода (путем простого создания потоков по мере необходимости) значительно перевешивают преимущества в настройке, управлении и использовании пула потоков.

ИМХО ...

...