4

私は C++ でコードを書いており、パラメーターを徹底的に検索しています。問題は、ある種のパラメーターについて、関数が無限ループに入る可能性があり、それを制御できないことです (私の関数ではなく、ブラック ボックスとして使用します)。私の質問は、「時間制限」で関数を実行できるかどうかです。たとえば、10 秒後に関数を中止して次の反復に移動できますか?

for(int i=0; i < 100; i++){
   aBlackBoxFunction(i);
   /* This function may goes into a infinite loop :(
   I want that if it won't end after 10 seconds, the function would abort and move to the next iteration. I can't change the function itself */ 
}
4

3 に答える 3

0

ささいなイベント ループを実装し、「時間制限」機能で作業をチャンクに分割し、タイムアウトまたは別の終了要求の後にイベント ループで停止イベントが発行されていないかどうかを定期的にチェックします。

このアプローチのオーバーヘッドはわずかですが、可能な限りクリーンな方法で作業を中断できます。

また、イベント ループを使用して、関数によって行われた進行状況を送り返すこともできます。進行状況バーのようなものを動かして、待機時間の手がかりをユーザーに提供したい場合です。

または、カウンターを実装して無限ループまたは再帰を追跡し、しきい値を超えた後に単に戻ることもできます。または、タイマーを使用して、経過時間が 10 秒未満のときに作業を行います。

欠点 - 機能を中断する安全な手段が必要です。そのため、そのブラック ボックスを開いてハックする必要があります。

于 2015-08-28T08:28:53.390 に答える