window procedure内で時間のかかる処理について

[戻る]
ぽてと [E-Mail] 2007/06/25(月) 22:20:22
こんにちは、
XP Pro SP2 VC++ .net 2003 SDKでプログラミングしています。

現在、画像処理のプログラムを作っていまして、
まずは、フォルダを指定するとそのフォルダ内の
ビットマップファイルを読み込んで、
子ウィンドウに表示していくという段階です。

さて、この処理ですが、親ウィンドウのウィンドウプロシージャから
SendMessage関数で自前のメッセージを子ウィンドウに送って処理しています。
このとき、whileループを使って、フォルダ内のファイル名を取得して
子ウィンドウにメッセージを送っているのですが、
処理したいフォルダ中に、ビットマップファイルが10000以上入っています。
そのため、このwhileループに時間がかかり、応答なし扱いになっているようです。
調べた所、必ず5秒で応答なしとされてしまいます。
一応、デバッグしている状態では最後まで動いてます。

このような場合で、うまく処理する方法はありますでしょうか?
調べた所、PeekMessage関数を使って、メッセージループの所を書き換えて
アイドル処理する方法があるのですが、これ以外にうまい方法は無いのでしょうか?

2007/06/25(月) 22:28:14
スレッドを作ってそちらで処理をする。
ただし、2重に操作要求が重なったり、、処理終了が前提の処理が実行されな
いように工夫する必要がある。

CreateThread
_beginthread
で調べてみてください。

ITO 2007/06/26(火) 13:10:47
「whileループ」で一度に処理しないで、ファイル情報を取得してから、あとは
「タイマ-ルーチン」でポ−リングしなが一つ一つ処理する方法もあると思います。
時間が掛かるので急ぐ場合は無理ですが......

ぽてと [E-Mail] 2007/06/26(火) 22:09:56
[[解決]]
>麩様
やはり、マルチスレッドが一番の解決策みたいですね。
とりあえず、マルチスレッドでやってみようと思います。

>ITO様
タイマーで処理していくのは考えたのですが、
なにぶんにも、ファイル数が大変多いもので…

お二人とも、アドバイスありがとうございました。

古いスレッドには追加発言できません。