VC++ 動作が遅くなる

解決


匿名  2008-09-12 01:37:15  No: 68997

VC++6.0で、三國無双シリーズの武将事典のようなもの(ほぼまんま)
を作っています。
ソースはひどいながら、まぁ動きは悪くない感じなんですが、
ひとつ問題が。

下キーを押し続けて連続で人物をスクロールしていくと
(とにかく武将事典を思い浮かべてください)、
デバッグ(F5)の時はスムーズに下に降りていくのですが、
Debugフォルダの.exeから同じ事をすると、
CPU使用率が100%になって画面に変化がなくなります。
(キーを離すと、押されてた分だけ一気にカーソルが飛びます)
一回一回ポツポツ押すと、通常どおり動きます。

考えられる原因はなんでしょうか?

ちなみに、
人物一人一人に個別のtxtファイルを持たせて、読み込んできています。

質問が下手ですみません。
よろしくおねがいします。


仲澤@失業者  2008-09-12 03:54:51  No: 68998

キー押下時の処理時間、特に描画時間が、キーリピート時間
間隔より大きいのではないでしょうか。
キー押下時の再描画完了時にGdiFlush()をコールして、
確実に描画が完了するようにしてみると、少しは改善する
かもしれません。


ミルチビ  2008-09-12 18:22:32  No: 68999

返事が遅れました。

>キー押下時の再描画完了時にGdiFlush()をコールして、
>確実に描画が完了するようにしてみると、少しは改善する
>かもしれません。
今やってみましたが、だめでした。
何の変化もなしです。

それと一つ発見。
.exe起動時に、バックグラウンドにプロジェクトが開かれていると
(この作成中のプロジェクトじゃなくても)、
動きは正常にスルスルと動きます。
プロジェクトを閉じて.exeを起動すると、
また、画面がかたまります。

とにかく、.exe単体で起動した時のみ、異常になります。

プロジェクトの起動中は、何か内部で特殊な動きをしているんですかね?
よくわからないです。


επιστημη  URL  2008-09-12 18:37:49  No: 69000

ハンドルの辻褄をあわせましょうね♪


rin  2008-09-12 19:08:38  No: 69001

「デバッグ版のexeを単体起動させてるから」
が一番の理由じゃないかな


ミルチビ(=匿名)  2008-09-12 22:18:41  No: 69002

>「デバッグ版のexeを単体起動させてるから」
と言いますと?

補足(補足になるかわかりませんが…)
txtファイルをANSI形式からUnicode形式に変えてから、
この問題が起るようになりました(たぶん)。
↑この変更によって、プログラムをUnicode関係に対応するように
いじりました(ファイルオープンとか)。
ソースにもUnicode文字があるので、何か形式を変えられて保存されました。

でもまぁこんなんは関係ないですかね^^;


どら  2008-09-13 00:48:45  No: 69003

>>「デバッグ版のexeを単体起動させてるから」
>と言いますと?

ビルドするときにDebug版でビルドしたものを実行しているということです。
デバッグせずに利用するならRelease版をビルドしないと、サイズがめちゃく
ちゃでかくなりますよ^^

それが原因で動作が異常に遅くなるかどうかは私にはわかりませんが・・・


ミルチビ  2008-09-13 01:23:12  No: 69004

Release版でビルドしても、状況は変わらず、でした。

CPU使用率が100%になってしまうということは、
処理しきれていない(?)
=無理させすぎ?
ファイルの読み込み連打がまずいのかな?
プログラミングが下手なだけかなぁ?

ん〜
キー押し続けの時の連打間隔を開ける方法なんてあるんですかね?


  2008-09-13 06:07:11  No: 69005

>ん〜
>キー押し続けの時の連打間隔を開ける方法なんてあるんですかね?
リピート開始までの時間は"コンパネ"→"キーボード"にあるから、
何かしらの方法で出来るかと思う(俺は知らないけどね)。

単純に「キーが離された時のカーソル位置に対応するtxtを読み出す」
というのは如何?


ミルチビ  2008-09-17 20:37:03  No: 69006

悠さんの言われた通りに、キーボードの設定を変えてやってみましたが
ダメでした^^;

なぜかVista(Home Edition?)ならすんなり動きました^^;

んで、たぶんプログラムが悪いんだろうということで、
一念発起して見直しました(一番苦手な作業)。
なんとなく、約360回まわるwhile文の中にあったif文を、
whileの外に出したら、(この作業に相当な時間を消費)
なんと問題が解決しました!

ボタン押し続けても、平均CPU使用率10%未満。
そんな無理させるほどの処理でもなかったと思うんですが…

とりあえず、解決しましたの報告でした。
皆さんお騒がせしまして申し訳ありませんでした。
並びに、ご回答ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加