2012-02-26 9 views
1

私は問題を抱えています。私は反ハックプログラムをプログラミングしていますが、JavaのThreadPoolのようなx時間ごとにどのように関数を繰り返すのか分かりません。C++ ThreadPoolを作成する(Javaのように)

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

しかし、他のコードしばらくはそれを許可いけないのでrunnedすることゴナない: 私はそのようなことを考えます。

は、他の私はそのようなことだと思う:

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

をしかし、私は最善の方法ではないと思います。

可能ですか? (JavaのようにThreadPoolを作成します)。 どのように? (良い例) 別の解決策? (良い例)

さて、それだけです。 読んでいただきありがとうございます。

答えて

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サポートをお持ちでない場合は、lambdasで追加の代替機能を使用できます。

自動変数が厳密に必要かどうかはわかりません。

これはスレッドプールではなく、waitでループする単一のスレッドであることに注意してください。

+0

おかげで、あなた、あなたは例のコードを置くことができますか? (参照しないでください)。 – Marcos

+0

@ user1233315私は従いません – 111111

1

私は全く確信していないこと、実際にニーズこの特定の問題のスレッドプール... ...しかし、あなたは1をしたい場合、私はこのライブラリを見てすることをお勧めします:

いくつかの一般的なルール:

  • の場合(例えば、インターネットのダウンロードを扱うような)スレッディングに適した明確に定義されたタスクを持っていない場合は、スレッドを使用しないでください。

  • 「スリープ/チェック」ループでサイクリングする代わりに(「イベント」まで)「ブロック」できる場合はブロックしてください。ポーリングは悪です。ブロッキングは良いです。

  • あなたが小さなスレッドを素早くランダムにやりとりすることがたくさんあると思われる場合は、「スレッドプール」が必要なのは唯一の理由です。スレッドプールの利点(AFAIK のみ)は、(新しいタスクに既存のスレッドを再利用することによって)スレッドの作成と破棄のオーバーヘッドを回避することです。ほとんどのシナリオでは、スレッドプールの設定、管理、使用のメリットが、コードを単純化する利点(単純にスレッドを必要に応じて作成する)よりもはるかに重要です。

私見...

関連する問題