ID : 2244
gCaoオブジェクト
gCaoオブジェクトはプロバイダの生成と消滅を管理するためのオブジェクトです。
gCaoオブジェクトは配列型で0~9番の10個の要素を持ち、各要素がORiN2のCaoWorkspaceオブジェクトに該当します。
"Cao"と"gCao"
PacScript言語において、Caoオブジェクトと同じ型(CaoWorkspace)は"Cao"と"gCao"の2つあります。
上図は、PacScript言語における、"Cao"と"gCao"の関係を示しています。
"Cao"はタスク(プログラム)内にローカルに、一つのみ存在する組込みオブジェクトであるのに対して、"gCao"は1つのグローバルオブジェクトとして、タスク外に存在します。
異なるタスクの"Cao"は互いに関連し合わないのに対して、"gCao"は異なるタスクであっても同じオブジェクト(gCao[n]のnが同じ場合)を参照する場合は影響し合います。
要素の参照
gCaoオブジェクトのn番の要素を参照するには以下の2つの表記が使用可能です
- gCao? 表記
gCao0, gCao1, gCao2, ... gCao9 と'?'には0~9の数字を指定します。
参照する要素が静的の場合にこの表記を使います。 - gCao[n] 表記
gCao[0], gCao[1], gCao[2], ... gCao[9] と'n'には最終的に値が0~9の数字なるような式を指定します。
式の評価は実行時に動的に行われます。
参照する要素が動的の場合にこの表記を使います。
オブジェクトの生成と消滅
gCaoオブジェクトはCaoオブジェクトとは異なり、オブジェクトの生成と消滅はPacScriptのタスクには依存せず、常にグローバルに存在し、消滅することはありません。
ただし、gCaoオブジェクトの各要素のオブジェクトは、参照されたタスクで以下の関連付けが行われます。
- タスクAの中でgCao[n]が参照された場合、タスクAの停止でgCao[n]が管理するプロバイダに対して、"プロバイダキャンセル要求(ProviderCancel)"が行われます。
- タスクAの中でgCao[n]が参照された場合、タスクAの開始でgCao[n]が管理するプロバイダに対して、"プロバイダクリア要求(ProviderClear)"が行われます。
複数タスクでのgCaoオブジェクト使用時の注意
あるタスクが停止するとそのタスクで参照されたgCao[n]に対して"プロバイダキャンセル要求(ProviderCancel)"が行われます。
これは、gCao[n].AddController()によって生成された、gCao[n].Controllersに管理されているすべてのプロバイダ の実行中の処理に対してキャンセル要求が行われることを意味します。これによりプロバイダが実行中の処理を中断し、エラーを発行するため、同じ gCao[n]を参照しているタスクが停止する結果になります。
この時、他のタスクの影響を受けないようにするためには、使用するgCao[n]の'n'を他の値にして使い分けてください。
関連コマンド
コマンド仕様に関してはCaoオブジェクトを参照してください。同一型のオブジェクトです。
用例
'Tsr0.pcs
Sub Main
I0 = 0 'フラグクリア
'QRCodeプロバイダをgCao0に追加する
Dim qr As Object
qr = gCao[0].AddController( "QRCode", "CaoProv.DENSO.QRCode", "", "Conn=Com:2" )
Do
Delay 100
If I0 = 1 Then Exit Do 'フラグが1になるまで待つ
Loop
'QRCodeプロバイダをgCao0から削除
gCao[0].Controllers.Remove "QRCode"
End Sub
'Tsr1.pcs
Sub Main
'QRCodeがgCao0に追加されるまで待つ
Do
Delay 100
If gCao[0].Controllers.IsMember( "QRCode" ) Then Exit Do
Loop
'QRCodeのオブジェクトをgCao0から取得する
Dim qr As Object
qr = gCao[0].Controllers.Item( "QRCode" )
': qr.コマンド 実行
I0 = 1 ' 使い終えたのでフラグを1にする
End Sub
ID : 2244