2

私は Visual Studio 2012 と C++ を使用しています。関数を 5 分ごとに呼び出す必要があります。なんとかそれを実行できましたが、CPU の 25% を消費し、理想とはかけ離れています。

コードは次のとおりです。

time_t start;
time_t end;
time(&start);
while (1) {
time(&end);
double dif = difftime (end,start);
if (dif >= 300) { autofunction(); time(&start);} else {} }

5 分ごとに関数を呼び出す CPU 効率の良い方法や、while ループを遅くする方法はありますか?

どんなガイダンスでも大歓迎です。

4

4 に答える 4

2

Windows には Sleep() があり、300 秒ごとに発生する何かについては、これで十分です。Windows にもタイマーがあり、これは関数である timerproc 引数を取る可能性がありますが、これは C++ ではなく C 関数であるため、静的でない限り、クラス メンバー関数であってはなりません。

于 2012-12-23T21:19:10.623 に答える
1

std::thread誰もそれを提案していないので、新しいandを生成するだけですSleep

于 2012-12-23T21:46:23.490 に答える
0

最良の答えは、あなたがしていることの詳細に依存すると思います。約 5 分だけにする必要がある場合は、経過時間の計算をプログラム的に便利な場所に配置して、5 分後に初めてタスクを実行して確認することができます。

それ以外の場合は、@BartekBanachewicz がsleep--- を使用するスレッドを開始するための最良の提案をしているようです。メイン スレッドが確実に 5 分以上実行される限りjoin()、最後に、またはいつでもスレッドを再実行しても問題はありません。

スレッドを使用すると、Windows 固有のものを必要としないという利点があります。たとえば、タイマー キューが何であれ、@OlafDietsche の提案です。c++ 0xでは、スレッドは非常に使いやすいです。http://www.justsoftwaresolutions.co.uk/threading/multithreading-in-c++0x-part-1-starting-threads.html

于 2012-12-23T22:08:03.650 に答える
0

あなたがしていることは待っていることです。経過時間を常にチェックするため、CPU 時間を使い果たします。

Windows を使用しているので、タイマー キューの使用が興味深いかもしれません。

これにより、コールバック関数を使用してタイマーが作成されます。タイマーが切れるのを待っている間、他の作業を行うことができます。

于 2012-12-23T21:42:39.177 に答える