アプリ版:「スタンプのみでお礼する」機能のリリースについて

スレッド内で
待機→10回doWork()を実行→待機→・・・
を繰り返す処理を行っています(下記コード参照)。

セマフォで処理の再開/停止を制御しています

待機時間が10msぐらいだと、再開直後の処理に時間がかかるようなことはないのですが、
待機時間が数百msとなると、再開直後の処理に時間がかかり、徐々に処理時間が
短くなり一定になります。(図参照)

これを、待機時間が数100msの場合でも、処理時間が一定になるようにするには
どうしたらよいでしょうか。

環境:
Windows 7
Visual Studio 2012 sp1
C++

while(1)
{
//セマフォで再開/停止を制御
if(WaitForSingleObject(m_hSem, INFINITE);
for(int i = 0; i < 10; i++)
{
doWork();
}
}

「スレッド再開後の処理に時間がかかる」の質問画像

A 回答 (1件)

該当プログラムで使っているメモリ(コード及びデータ)が、止めている間に他のプログラムを動かすためにキャッシュから(場合によってはメモリから)消されて、再開時に再読み込みの時間が掛かるようになっている。


メモリからスワップアウトされるのを回避するのはメモリ上にロックするシステムコールがあったと思うけど、キャッシュの方は難しい。というか無理をするとほかのプログラムの実行が大きく阻害される。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2016/03/19 19:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!