2007年05月05日

マルチスレッド

 今日は昨日の続きで「見比べ君2」のマルチスレッドをやりました。
 結局、CEventの使い方が良くなかったみたいです。
 専門的な話になりますが、
CEventのコンストラクタで、第一引数をCMultiLockを使えるようにTRUEにし、第二引数を手動イベントにするためTRUEにしたら、後は素直に書いていけば問題なく動くようになりました。

 再帰呼び出し時の処理も、関数の最後でスレッドを待っていたのを止め、呼び出し元の最後で待つようにしたらいけました。
 これは、昨日布団に入ってから気付き、朝一で修正しました。
 きちんと動くのを確認したら、今日は何もやらず、ずっとDVDを見ていました。
 マルチスレッドが使えるようになると、今よりもっと良いものが作れるようになると思います。

 ただ、スレッド数を増やすとメモリの使用量も増えるので、ある程度は考えて使わないと駄目みたいです。
 今日確認したら、最高で100メガを超えていました。
 最近のパソコンはメモリの搭載量も増えてきていますが、それでも一つのソフトで多く使うのは避けたいところでしょう。
 画像ファイルは、プログラム内部ではビットマップに変換して扱うので、どうしてもメモリ使用量は増えます。
 特に、最近多いデジカメ画像とかになると、サイズが大きい分展開するとメモリの使用量が大きくなります。

 ここで、そのときのメモリ使用量の計算方法を書くと、画像の幅 x 高さ x (画面のビット数/8)で、例を挙げると、画像が、2000 x 1500で、画面が32bitの場合、2000 x 1500 x (32/8)で、12,000,000バイト(12メガ)になります。
 正確にはヘッダもあるので、もう少し大きくなりますが、これを10枚同時に開くと軽く100メガを超える、という訳です。
 といっても、読み込んで処理を終えるとすぐ解放するので、増えたり減ったりを繰り返します。

 と、今日は専門的な事が多くなりましたが、画像ファイルを扱う場合はどうしてもメモリの使用量が増えると思ってください。
 JPEGなどは圧縮してあるのでサイズは小さいですが、使うときは展開するので結局サイズは大きくなります。

ランキングへ  posted by 遠雷 at 01:32 | コメント(0) | パソコン・インターネット

2007年05月04日

再帰呼び出しのマルチスレッド

 今日も「見比べ君2」をやりました。
 とりあえずマルチスレッド化は出来たのですが、再帰呼び出しをすると何故か途中で止まるようになりました。
 まだ原因が解らないままで、悩んでいます。
 WEBで検索すると、マイクロソフトのサイトに今回使っているCMultiLockについての問題点が出ていたのですが、今回のとは関係なさそうです。
 しかし、マイクロソフトのサイトの日本語訳はひどいですねー、原文を読んだ方が解りやすいですからねー。

 次に、「解像度変更君」も少しやりました。
 ファイル取り込みや、解像度変更などの作業中に、他の作業をしようと思えば出来る(ボタンなどを押せる)ので、出来ないようにしたり、一部の特殊なファイルでも変更出来るようにしたりしました。
 このソフトもマルチスレッド化しようと思いましたが、そんなに作業時間が長くないので、とりあえずはいいかぁ、ということで止めました。
 実験で1万ファイルやってみたけど、苦になるほど時間は掛らなかったです。
 これも環境によるのでしょうけど、最近のパソコンなら大丈夫でしょう。

ランキングへ  posted by 遠雷 at 00:45 | コメント(0) | パソコン・インターネット