2012-02-26 3 views
1

У меня возникла проблема, я программирую программу анти-атак, но у меня нет идеи, как повторять функцию каждые x времени, например ThreadPool в java. Я думаю, что-то вроде этого:C++ Создать ThreadPool (как java)

while(true) 
{ 
    //Bad Procces its def before 
    if(badprocces()) 
     ExitApplication(1); 
} 
//Other code there 

Но другой код не Гона быть запущено, потому что в то время как Dont позволить.

Else я думаю, что-то вроде этого:

while(true) 
{ 
//Bad Procces its def before 
    if(badprocces()) 
     ExitApplication(1); 
    if(anotherCheck()) 
     ExitApplication(1); 
} 

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

Возможно ли это? (Создайте вызов ThreadPool, как в java). Как это сделать? (Пример Whit лучше) Другое решение? (Пример лучше белого)

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

ответ

2

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

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.

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

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

+0

Спасибо вам, вы можете положить пример кода? (Нет ссылки). – Marcos

+0

@ user1233315 i dont follow – 111111

1

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

Некоторые общие правила большого пальца:

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

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

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

ИМХО ...