ID : 5525
プロバイダイベントの受取り
プロバイダイベントとは
プロバイダイベントとは、プロバイダにおいて、メインのタスクと非同期で行っている処理がある場合、任意のタイミングで処理結果や状態を、メインのタスクに通知するメカニズムのことです。
PacScriptでは、専用のステートメントを使って、このプロバイダイベントを任意のタイミングで受取れるようにしています。
プロバイダイベントの受取り準備
プロバイダイベントを受取れるようにするには、AddHandlerステートメントで、受取るイベント名と受取り先のメソッドを登録します。
プロバイダイベントの受取り待ち
イベントの受取り先を登録したら、メインのタスクでは、必要なイベントを受取り終えるまで、次のような待ちのループを作成して待機させます。
Do
Delay 10
If 終了条件 Then Exit Do
Loop
プロバイダイベントの受取り処理
プロバイダがイベントを発行したら、AddHanlderで登録したメソッドが自動で呼ばれます。このメソッドに渡される引数を使用して必要な処理を実行します。
Sub OnMessage (ByVal Sender As Object, ByVal Args As Variant)
メソッドの各引数は次の通りです。
- Sender
- イベントを発行したオブジェクトへの参照が代入されます。
- Args
- イベントを発行した時のパラメータが代入されます。
Argsの値はイベントを発行したオブジェクトに依存しますので、お使いのプロバイダマニュアルを参照ください。
イベント受取り処理とタスクのメイン処理
タスク内のメイン処理(OnMessage以外の処理)では、行が切り替わるタイミングで、イベントの確認が行われます。イベントがあれば、イベント受取りメソッド(OnMessage)がコールされます。そして、イベント受取りメソッドでの処理が終了すると、メイン処理の次の行が実行されます。
メイン処理とイベント受取メソッドを並列実行させたい場合は、それぞれの処理を別々のタスクに分けて実行してください。
プロバイダイベントの受取り終了
プロバイダからのイベントの受取りが不要になった時点で、次のようにRemoveHandlerステートメントを呼び出して、終了処理を行います。
RemoveHandler オブジェクト
オブジェクトは、AddHandlerで登録したオブジェクトと同じものを指定します。
プロバイダイベントの受取りサンプル
QRコードプロバイダを使用し、QRコードリーダがQRコードを読取ったタイミングで、読取りデータを受取る処理は、次のようになります。
このサンプルでは、3つのコードを読取って完了する処理として、実装されています。
Dim g_Counter As Integer = 0 '受取り個数
Sub Main()
Dim ctrl As Object
ctrl = Cao.AddController( "QR", "CaoProv.DENSO.QRCode", "",
"Conn=com:6:38400:N:8:1, Mode=5, Protocol=0:0:0" )
'受取りイベント名と先の指定
AddHandler ctrl, "OnMessage", OnMessage
g_Counter = 0
'イベントの受信待ちループ
Do
Delay 10
If g_Counter >= 3 Then Exit Do
Loop
'受取りの解除
RemoveHandler ctrl
End Sub
'Event Handler for OnMessage
Sub OnMessage( ByVal Sender As Object, ByVal Args As Variant )
Dim msg as object
msg = Args(0) '::= CaoMessage object
PrintDbg "" & Time & " - CODE = [" & msg.Value & "]"
g_Counter = g_Counter + 1
End Sub
ID : 5525