![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
複数のタイマー割り込み(A,B,C,...)が存在する時
各割り込みルーチンから共通のライブラリ Eesasa を使用する場合
Visual Basic 6.0 SP5 内部ルーチンにおける資源の取り扱いに関する
ヘルプファイルの内容を読みたいのですが、検索語がわかりません。
対応するヘルプファイル名又は適切なシソーラスをお教えください。
想定するルーチンは以下のとおりです。
ファイル a.frm, b.frm, c.frm,...
Private Sub Form_load
Timer1.Enabled=True
end sub
Private Sub Timer1_Timer()
IF (適当な条件) then call Eesasa
end sub
ファイル EesasaSub.Bas
sub Eesasa
(適当な処理)
end sub
A.frm,...と EesasaSUB.bas は同一プロジェクトに属します。
Eesasa の処理中に別の割り込みがかかった場合後から発生した割り込みがEesasaを参照することについて
Eesasa 内で待ちループをかけるか
Eesasa の入り口ではじき各Frmファイル内で待ちループをかけるか
Eesasa とは別名の短時間処理ルーチンを作成しフラグを返す。各Frmファイル内で待ちループをかけるか
Eesasa 処理中のフラグを EsasaSub.bas 内にもてるか
レジストリ等外部資源に保存する必要があるか
別タスクにして EEsasa.exe を起動する(http://oshiete1.goo.ne.jp/kotaeru.php3?q=727770等)必要があるか。
ユーザー側が上記のような資源の占有・解放を宣言し待ちルーチンを作成するか
Visual Basic 6.0 SP5 が
資源関係を意識しないで済むような処理になっているか
専用の資源占有開放命令を持っているか
がわからないのです。
Eesasa の処理終了まで割り込みを禁止する方法は使えません。
Eesasa の処理に1回あたり短いもので1-3秒・長いもので3-8時間かかります。
しかも中断処理が存在します(10分以上長い処理に付き合いきれないので処理を中断して待ち行列の最後につなぎたい)。
No.1ベストアンサー
- 回答日時:
質問の中にある「sub Eesasa」の実行中に、タイマー等の要因により再度「sub Eesasa」が呼び出されるようなことがあるかどうか、あるとすればどのような条件か、回避するための仕組みがVB6に備わっているかどうか、備わっているとすればドキュメンテーションがどこにあるのか、をお尋ねと理解しました。
(間違っている場合にはご指摘ください。)まず「sub Eesasa」への再入の可能性ですが、「sub Eesasa」の中でDoEventsを実行すると発生します。逆に言えば、DoEventsを実行しなければ再入の可能性はありません。
DoEventsを実行すると、その時点でアプリケーションのイベント処理が行われる可能性が生じます。このイベント処理(タイマーイベントもその中の1つです)によって「sub Eesasa」が呼び出されると再入が起きることになります。
このような再入を回避したい場合、そのための専用の仕組みや自動的に再入を回避する仕組みはVB6に備わっていませんので、自前で再入を回避するコードを作成する必要があります。
この回答への補足
ご回答の内容の理解に時間がかかりました。
優先度の最も低い待ちタスクとして「sub Eesasa」を考えています。すべての割り込みが発生しないときに「sub Eesasa」を実行したい(割り込みが発生した時点で無条件に処理を中断する)のですがそれらしき内容がみつかりません。
>回避するコードを作成する
する場合に「sub Eesasa」の実行状態を保存するフラグをどこに保存するか.このフラグの参照ルーチンをどこに保存するか.共通化できるかできないか。
実行中の変数をどこに保存するか.「Call Eesasa」の実行により破壊される変数があるか.
sub Eesasa
if (現在処理中のフラグが立っている) then exit sub
(適当な処理)
end sub
Sub tekito
'このルーチンを「sub Eesasa」と同じ*.basに保存するか.a.frm,...に保存するか
if not (現在処理中のフラグが立っている) then call Eesasa
end sub
フラグをグローバル変数として保存するか.
各局所ファイル(*.bas)に保存するか.
iniファイルやレジストリのような外部ファイルに保存するか
どの時点で宣言された変数が初期化されるかがよくわからないのです。*.frm ですといろいろ書いてあるのですが*.basに関しての記載が見つかりません。
No.2
- 回答日時:
問題とされている点とVB6との関係が分かりづらいので、VB6で使用されている言葉を使って説明していただけると、またそうでない用語は解説していただけると助かります。
例えば、質問や補足の中で「割り込み」という用語を何度かお使いですが、VB6には「割り込み」と呼ばれるような機能がありませんので、実際のプログラムでは何を使って実現している機能で、どういう問題を感じていらっしゃるのかが、曖昧にしか分かりません。
他のプログラミング言語やプログラム実行環境で一般に「割り込み」と呼ばれる機能に近いものは、VB6では「イベント」と呼びます。
一般的な「割り込み」とVB6の「イベント」の大きな違いは、「割り込み」ではプログラムの実行が自動的に中断されて「割り込み」ルーチンが実行されるのに対して、VB6の「イベント」は自動的に中断されることがない点です。
なお、イベントに関しては
Visual Basicドキュメント
→プログラミング ガイド
→Visual Basicの基本
→プログラミングの基礎
→Visual Basicアプリケーションの構造
以下に記述があります。
また変数の有効期間に関する記述は
Visual Basicドキュメント
→プログラミング ガイド
→Visual Basicの基本
→プログラミングの基礎
→変数、定数、およびデータ型
以下に記述があるようです。
おかげさまで複数処理機構の仮想同時処理が作成できました。
>VB6で使用されている言葉を使って説明
これができれば自分でHELPメッセージから必要な内容を見つけられるのですが現時点でできません。
>そうでない用語は解説して
JIS X001-X0706の内容に準じています(教材コンピュータのマニュアルの内容)がいかがなものでしょうか。
>中断されることがない点です。
ご説明いただきVBの大体の雰囲気がつかめてきました。この方法は事象の発生後特権命令を使用してスプールに登録し割り込みが終了・ユーザーからスプールの実行を指示することで特権命令使うことなくユーザーが各事象に対応した擬似マルチタクスを実行できるシングルタクスプログラムの方法です。学生時代この処理を作成して電算機の先生方に罵倒された思い出がある方法です。マイクロソフトではVB発売当初「新しい方法」と宣伝していましたが少なくとも5年以上前に研究者は各種問題を熟知していたようです。
変数については
Visual Basicドキュメント
Visual Basicの使用方法
プログラミング ガイド
Visual Basicの基本
プログラミングの基礎
変数、定数、およびデータ型
静的変数
にそれらしき記載がありました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
電車で待機列の割り込みについ...
-
スーパーのレジで並んでいたら...
-
駅のトイレでナイチンに邪魔さ...
-
H8SX/1655のタイマー割り込みに...
-
このレジの並び方は間違ってま...
-
PIC24F C言語プログラミングに...
-
PIC12F683のソフトウェアUARTは...
-
USJでの割り込み
-
VB6でSendKeyを利用したTab移動...
-
PIC(MOVFで何故、STATUS Zフラ...
-
PIC18F2550の割り込み処理について
-
PIC12F683から移植
-
マイコンの割り込みについて教...
-
正確な1msecのタイマ割込
-
割り込みのカウントの仕方
-
V.B.6 多重Call用スプール作成...
-
CPUの処理量を減らすコーデ...
-
SH-2マイコンの割り込みについて
-
SH2 (SH7144)のソフトウェアス...
-
CPU負荷率の安全な上限と計...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
電車で待機列の割り込みについ...
-
スーパーのレジで並んでいたら...
-
USJでの割り込み
-
pic 複数の割り込み関数 切り分...
-
一定時間操作がなかったら、と...
-
Amazonfireタブレットにわから...
-
【組込み】割り込み中のstatic...
-
VB6でSendKeyを利用したTab移動...
-
CPU負荷率の安全な上限と計...
-
マイコンSH-2の割り込みを用い...
-
Excelでタイマーの一時停止する...
-
割り込み中に例外異常
-
CPUの処理量を減らすコーデ...
-
このレジの並び方は間違ってま...
-
PICのPIN変化割り込みに...
-
STATUSのZフラグについて
-
駅のトイレでナイチンに邪魔さ...
-
電車乗車時、並んでいるのに割...
-
PICマイコンでエンコーダパルス...
-
割り込み処理のシミュレート
おすすめ情報