プロが教えるわが家の防犯対策術!

WindowsのVisualC++です。

同じひとつのプログラムの中で、ある関数があって、これを裏でやりたいのです。たとえば、

void readFiles()
{
   for( i=0; i < 100000; i++ )
   {
      file.readline(i);
      処理;
   }
}

みたいな感じのサブルーチンを作って、これをそのまま実行すると、10秒くらいかかったとします。
すると、その間、キー入力などPreTranslateMessageに関することとか一切受け付けなくなりますよね。
このreadFilesという関数が終了するまで、ほかの仕事は一切できなくなってしまうと思うのですが、
これを裏ジョブにして、この関数を実行中でもキー入力を受け付けて他の仕事をするようにしたいのです。
そして、他の仕事がなくなってアイドル状態になったら、またこの関数の続きをするようにしたいのですが、どうしたらいいのでしょうか。

A 回答 (2件)

既に回答あるように…スレッドを使うのが普通…かと。



で、スレッド使う場合は同期処理について考慮しておかないといろいろ不都合が出たりするのでご注意を。
ファイル読み込みループが回っている間に、GUIを閉じようとした場合にどうなるか…とか。
読み込んだ内容によってGUIなどに反映させる場合にどうするか…とか。

アイドル状態…についてはちょっと手間が必要かも知れません。
スレッドで動作していると割り当てられたCPU時間使って処理しますが、そこだけだとアイドル状態の判定とか難しいでしょう。
# また、スレッドだからとそのまま突っ走る処理だと…CPU使用率も上がっていきます。
    • good
    • 0
この回答へのお礼

注意点、ありがとうござました。
なんとかなりました。

お礼日時:2011/09/19 21:47

スレッドを分けることで実現できます。


_beginthreadについて調べてみてください。
MFCを使っているなら、AfxBeginThreadの方がいいでしょう。

_beginthread、_beginthreadex
http://msdn.microsoft.com/ja-jp/library/kdzttdcb …

AfxBeginThread
http://msdn.microsoft.com/ja-jp/library/s3w9x78e …
    • good
    • 0
この回答へのお礼

ありがとうございました。
なんとかなりました。

お礼日時:2011/09/19 21:47

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