OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

VB6プログラムの実行中でのこと

  • 困ってます
  • 質問No.198201
  • 閲覧数939
  • ありがとう数2
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 50% (3/6)

VB6で作成したプログラムを実行していると、突然フリーズしたように
約10秒程止まる場合があります。一度、この現象が現れるとそれ以降は普通に
動作します。
実行するたびにこのようになります。
考えられる原因や対応方法などありましたら教えてください。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.5
レベル12

ベストアンサー率 65% (276/422)

今読み直して気が付いたのですが、、、

>止まる時は決まっていないのですが、Tabキーでの移動やコマンドボタンを
>クリックした時が多いような気がします。

もしかしてですが・・・・
SetFocusやGotFocus/LostFocusのイベント類を使用していませんか?
もし、コントロールAがフォーカスを受けた時、処理によってはコントロールBにフォーカスを移動させるなど・・・
フォーカス永久ループっていうことも考えられます。

以前に書いたように、1度目と2度目の実行は、メモリにロードされていない/されているという違いがあります。
よって、1つの処理についてのPCへの不可が比べ物にならないくらいかかります。
先に挙げたGotFocus/LostFocusイベントは、OSの状況によって左右されることもあります。

フォーカス永久ループの調査方法として、各GotFocusイベントにDebug.Print ActiveControl.Nameなどと記してみてください。

それと、、、思い出したのでついでに書いておきます。
Command1.FontBold = True とかしてませんか?
以前に経験したのですが、VB4ならこれでよいのですが、VB6のときたまにフォーカス永久ループになった経験があります。
Command1.Font.Bold = True とすることで回避できました。

FontBoldとFont.Boldの違いが、HP上では違いがわかりづらいですね。
一度、このページをテキストか何かにコピペして読んだらわかりやすいかも?
お礼コメント
yukotoaiko

お礼率 50% (3/6)

前回に頂いた回答と合わせてお礼を申し上げます。おかげさまで私自身、たくさんの勉強になりました。本当にありがとうございます。
前回の回答でご指摘のあった点で、その通りの指摘事項がありました。
・DBを使っています。
・たくさんのコントロールを使っています。
・EXEの容量も大きいような気がします。約750KB位です。初心者の本を参考に、初めて作ったプログラムなので分割の方法があるということはわかりませんでした。やり方もわかりません。
そして、今回の回答にも私はびっくりしています。まさにその通りです。初心者のはずかしいプログラムを見られているようです。
SetFocusもCommand1.FontBoldも使っています。
回答して頂いた内容をそのまま使用してみることにします。
助かっただけでなく、勉強にもなり、ご親切にありがとうございました。
投稿日時 - 2002-01-16 23:17:48
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル10

ベストアンサー率 17% (31/179)

長いループ処理などがあると他のアプリケーションに処理が移らなくなります。 そんなときは DoEvents関数をつかいます。 ...続きを読む
長いループ処理などがあると他のアプリケーションに処理が移らなくなります。

そんなときは
DoEvents関数をつかいます。
補足コメント
yukotoaiko

お礼率 50% (3/6)

止まる時は決まっていないのですが、Tabキーでの移動やコマンドボタンを
クリックした時が多いような気がします。
プログラムでの処理で止まっている感じではないようです。
説明が足りなくてすみませんでした。
投稿日時 - 2002-01-15 22:29:56


  • 回答No.2
レベル12

ベストアンサー率 65% (276/422)

いろいろなことが考えられます。 起動時の処理が重ければ重いほど、2回目以降と差が生じます。 OSのメモリに一度ロードされたものは、メモリに残っている時はプログラムを毎回見に行かず、メモリを参照します。 なので、2回目以降は早くなることも考えられます。 あるいはDBに接続を行っている場合もそうです。これはスペックが低いPCほど、初回と2回目以降に差が生じます。 WinNTやWin200 ...続きを読む
いろいろなことが考えられます。

起動時の処理が重ければ重いほど、2回目以降と差が生じます。
OSのメモリに一度ロードされたものは、メモリに残っている時はプログラムを毎回見に行かず、メモリを参照します。
なので、2回目以降は早くなることも考えられます。

あるいはDBに接続を行っている場合もそうです。これはスペックが低いPCほど、初回と2回目以降に差が生じます。

WinNTやWin2000を使用したことがあるのであればわかると思いますが、最初のログイン時と、ログオフして再ログインするのとでは、起動速度が違います。常駐ソフトの立ち上がりが違うからです。

一番の回避方法は、無駄にメモリを消費するようなプログラムを作成しないように努めることです。そうしたら、他のプログラムを邪魔をしないし、OSがメモリを参照しないでプログラムを見ていても、実行速度の差が少なくなります。

でもやはり、どんなプログラムを見ても、メモリ参照に勝るものはないですね。
お礼コメント
yukotoaiko

お礼率 50% (3/6)

実行した途端に現象がでることもあります。
止まる個所はまったく決まっていないのですが。
メモリの問題なのでしょうか。
メモリの問題があるということを初めて知りました。
回答してくださってありがとうございました。
投稿日時 - 2002-01-15 22:47:59
  • 回答No.3
レベル12

ベストアンサー率 65% (276/422)

前回の発言は、1度目と2度目の実行時の差を説明しました。 >VB6で作成したプログラムを実行していると、突然フリーズしたように VBだからそうなるとは考えにくいですよね ^^; VBで作ったソフトだからそうなるとは、聞いたことがありません。 そちらの状況が良くわからないため、その1度目になぜそのような状況になるのかわかりません。 考え付くのは「環境」「プログラムの作り」ぐらいです。 ...続きを読む
前回の発言は、1度目と2度目の実行時の差を説明しました。

>VB6で作成したプログラムを実行していると、突然フリーズしたように
VBだからそうなるとは考えにくいですよね ^^;
VBで作ったソフトだからそうなるとは、聞いたことがありません。

そちらの状況が良くわからないため、その1度目になぜそのような状況になるのかわかりません。
考え付くのは「環境」「プログラムの作り」ぐらいです。

以下に想像されることを書いておきます。
※1.ソフトを起動しているPC環境
一.メモリが少なくないですか?
二.CPUが古いタイプではないですか??
三.OSがインストールされているドライブの空き容量が少なくなってませんか?
四.常駐ソフトが多数起動中ではないですか?

※2.もし環境に問題がなければ、プログラムの作りに問題があると思われます。
一.DBを使用していますか?
二.画像/アイコンなどをたくさん使用していませんか?
三.コントロール類を多様していませんか?
四.FileSystemObjectを使用してませんか?(ルートを参照するとたまに重くなります)
五.PCが起動してすぐに立ち上げてませんか?(HDDにがビジー状態でないときに起動したほうがよいですよね)
六.コンパイル後のEXEの容量はいくつですか?(大きいEXEなら、機能分割をした別EXEにする方法もあります)
七.OLEオブジェクトを使用したフォームをロードしてませんか?(外部アプリの埋め込みは、結構処理が重いです)
八.市販のDBGridのようなもの(名前を書きたいけれど、批判されそうなので、名前は伏せます)を使用していませんか?

一番の解決方法は、ソースをここで公開することかも?
  • 回答No.4
レベル12

ベストアンサー率 40% (230/562)

サスペンドしてるHDDの復帰だったりして・・・。
サスペンドしてるHDDの復帰だったりして・・・。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ