- ベストアンサー
V.B.6 多重Call用スプール作成等について
- V.B.6 多重Call用スプール作成などについての資源の取り扱いに関するヘルプファイルの内容を知りたい
- 複数のタイマー割り込みが存在する場合に、各割り込みルーチンから共通のライブラリ Eesasa を使用する方法について悩んでいます
- Eesasa の処理中に別の割り込みが起こった場合、後から発生した割り込みが Eesasa を参照する問題について解決策を知りたい
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
質問の中にある「sub Eesasa」の実行中に、タイマー等の要因により再度「sub Eesasa」が呼び出されるようなことがあるかどうか、あるとすればどのような条件か、回避するための仕組みがVB6に備わっているかどうか、備わっているとすればドキュメンテーションがどこにあるのか、をお尋ねと理解しました。(間違っている場合にはご指摘ください。) まず「sub Eesasa」への再入の可能性ですが、「sub Eesasa」の中でDoEventsを実行すると発生します。逆に言えば、DoEventsを実行しなければ再入の可能性はありません。 DoEventsを実行すると、その時点でアプリケーションのイベント処理が行われる可能性が生じます。このイベント処理(タイマーイベントもその中の1つです)によって「sub Eesasa」が呼び出されると再入が起きることになります。 このような再入を回避したい場合、そのための専用の仕組みや自動的に再入を回避する仕組みはVB6に備わっていませんので、自前で再入を回避するコードを作成する必要があります。
その他の回答 (1)
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
問題とされている点と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の基本 プログラミングの基礎 変数、定数、およびデータ型 静的変数 にそれらしき記載がありました。
補足
ご回答の内容の理解に時間がかかりました。 優先度の最も低い待ちタスクとして「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に関しての記載が見つかりません。