
言語 Visual Basic 6.0(SP5)
自殺プログラム-条件が成立したら自分自身を消去するプログラム-として
タイマー条件付 「MsgBox 関数」モドキを作りたい(実際に作る内容はオーバーレイプログラムとして通信関係資源を含む外部資源の操作等も含みます)のですが
経過時間表示をしない「MsgBox 関数モドキ」
と
タイマーで終了(unload)せず手作業が必須な「MsgBox 関数モドキ」(非表示には成功しました)
と
親frmまで殺す「MsgBox 関数モドキ」
の作成には成功しました。
MsgBoxModoki.Show
等で参照した MsgBoxModoki.frm が
1.手作業を伴わずに何かしらの表示を伴う手続きを実行する命令(ヘルプメッセージの検索用語すらわかりません)等
2.自らunloadするようにする命令等
ご存知の方いらっしゃいませんか。いらっしゃったらば命令や検索語をお知らせください。
No.1ベストアンサー
- 回答日時:
1.タイマ処理のことでしょうか?違ってたら回答にならないのですが、
Timerオブジェクトを使用してタイマイベントを発生させ、そのイベントメソッド内で処理を記述する。
(Timerオブジェクトでヘルプ検索)
2.MsgBoxModoki.frm が発行する命令という解釈で、
"Unload Me"
(そういうことを質問されているのではないですか?)
※見当違いなことをいってたら無視してください。
この回答への補足
6割がた解決しました。
終了処理関係の情報がわかりません。
Timer処理内ルーチンで事象待ち状態(例.DNSにアクセスし接続先IP番号を決定するまでの最大20秒間, 相手先IPにECHOを送り応答があるまでの約0.3秒*4回等)にあるときに
左上「X」を使用した強制終了をオペレーターが命じるとUnload等のルーチンに移動します。
Unload 内で Timer1.E(なんとか)=Faile を実行してもTimer処理ルーチンの最後のExit sub又はEnd SUb が実行されるまで処理が継続します。終了処理として関係ファイルのClose等を先に実行してしまう等の関係でエラー処理から無限ループに陥ってイます。
結果としてUnload後もTimer処理ルーチンが生き残っています。親FormからのUnload命令でもTimer処理が停止しません。適当なところでV.B.の実行をブレークポイントでとめて追跡した結果いじょうの内容が判明しました。
待ち状態にないのであれば簡単にとまります。
Unload Me 等Unload の処理は
Form_QueryUnload()
Form_Unload()
Form_Terminate()
の順番で発生するようです。
Unload()の処理中に
Sub Form_QueryUnload(適当に)
if (タイマー処理フラグ) then 強制終了フラグ = True Cancel = 1
end sub
Sub Form_Unload()
Timer.Enabled = False: 'Timer動作停止
end sub
Sub Timer_Timer()
if (タイマー処理フラグ) then exit sub
タイマー処理フラグ = True
call 適当な処理
タイマー処理フラグ = False
if (強制終了フラグ) then
Timer.Enabled = False: 'Timer動作停止
unload Me
end if
end sub
Sub 適当な処理
do
call 適当にpingの実行
DoEvents
if (強制終了フラグ) then Call TCP/IPの終了処理: exit do
loop (ping が通るまで待つ)
end sub
のように
1.Unloda処理ルーチン内でタイマーが動作している場合(Sub 適当な処理内DoEventの処理としてUnload処理が開始された場合)にはunloadを中断し、強制終了フラグを立てる
2.タイマー処理ルーチン内で強制終了フラグを見て処理を中断し
3.タイマー処理内に戻ったところでタイマーを終了して
4.再度unload が実行されるのをひたすら待つ。自らunload できる場合があるのでunload を一応かけておく。
5.unloadが失敗することがある(TCP/IPの終了処理が失敗した場合など)ので親formでもう一回unloadを実行する(TCP/IPが正常終了したことを信じで)
の処理が必要なようです。
特権命令を使える普通のマルチタスクならば、タイマー処理であろうとも何であろうとも特権命令を自ら実行する(一般ユーザーであっても自分自身に対しては特権命令が実行可能)のですがWindows では終了命令を自ら検出して正常終了する必要があるようです。これでは、ハングアップが多いのも納得できます。
それらしきソフトが完成しました。なおSP5を使用しています。SP6ではTCP/IPサーバーソフトが動きませんので。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
arduino
-
H8Sで割り込み発生時の飛び先ア...
-
アセンブリ言語で。
-
プログラム言語FortranとCの違...
-
32ビット用のソフトを64ビ...
-
RPG画面系システムについて
-
16bitはダイナミックレンジが97...
-
携帯電話の略語であるMBって英...
-
EXCELでの16進数取り出し、上...
-
Excel_VBAで改行コードの無いフ...
-
GB と Gbの違いの意味
-
ジークアクスのサイコガンダム...
-
1秒は何ミリ秒とか、単位変換の...
-
エクセルでビット1をカウント J...
-
【有効数字について】 授業で、...
-
バイト表記の計算方法
-
2ビット、3ビット、4ビットのグ...
-
おねがいします。
-
EXCEL16進⇒浮動小数変換したい
-
アルファベット30文字は何バイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラム言語FortranとCの違...
-
arduino
-
64ビット化による処理速度低下...
-
組み込みCプログラムで実数型
-
CPU、Z80からステート数から...
-
CPUのHTについて教えてください。
-
アセンブリ言語で。
-
COM1(RS232C)とUSB仮想COMポー...
-
VBSとVBA
-
H8Sで割り込み発生時の飛び先ア...
-
ステート数とは
-
PICマイコンのプログラムについ...
-
+=と÷=の処理速度の謎を教え...
-
パイプライン処理の処理能力に...
-
応用情報技術者試験問題の解き...
-
マイコンのビット数とクロック数
-
私は
-
任天堂64の64 CPUの仕...
-
IPCについて
-
MIPS と クロック周波数の換算方法
おすすめ情報