プログラミングのヒント
FL-net通信ライブラリには多くの関数が用意されていますが、以下の3つの関数を使用するだけでコモンメモリによる他ノードとの交信ができます。まずは以下の関数を使用して、必要に応じて他の関数を使用するようにします。
関数 | 機能 |
---|---|
BflOpen | FL-netネットワークに参加する |
BflRead | コモンメモリを読み込む |
BflWrite | コモンメモリに書き込む |
FL-netネットワークに参加した後、ユーザーアプリケーションを終了するまでFL-netネットワークから離脱する必要がなければ、BflClose関数を呼び出す必要はありません。FL-net通信DLLがアンロードされる時に、自動的にBflClose関数が呼び出されます。また、ユーザーアプリケーションが何らかの理由により異常終了した場合でも、FL-net通信エンジンが適切に離脱処理を行います。
コールバック関数による状態変更通知を必ず実装する必要はありません。ノード状態を取得する関数は、任意のタイミングで呼び出すことができます。ユーザーアプリケーションのタイマーイベントやワーカースレッドで定期的にノード状態を取得することもできます。また、コモンメモリにウォッチドッグタイマーを定義している場合などでは、ノード状態の取得そのものが不要になる場合もあります。コールバック関数による状態変更通知が必要なければ、以下のようにBflOpen関数にNULLを指定することができます。
BflOpen(0, NULL, NULL);
コールバック関数を使用する場合は、以下の点に注意してください。
注意1
ノード状態変更やメッセージ送受信を通知するコールバック関数は、FL-net通信ライブラリの内部で生成されるワーカースレッドで実行されます。コールバック関数の処理結果をウィンドウに表示する場合は注意が必要です。一般にWindowsのコントロールはスレッドセーフとは限りません。コールバック関数内でコントロールにアクセスすると予期しない結果を引き起こすことがあります。コールバック関数の処理結果をウィンドウに表示する場合は、PostMessage関数を使用して、処理結果またはイベントそのものをウィンドウを作成したスレッド(一般的にはプライマリスレッド)へリダイレクトします。
また、コールバック関数内でスレッドを切り替える関数の呼び出しは、デッドロックの原因となる場合があるので注意してください。例えば、コールバック関数内でSendMessage関数を呼び出していて、ウィンドウを作成したスレッドでBflClose関数を呼び出した場合、デッドロック状態になります。これは、BflClose関数がコールバック関数の終了を待機するからです。コールバック関数の処理結果をウィンドウに表示する場合は、PostMessage関数を使用するのが安全です。
注意2
コールバック関数からは極力短時間で復帰してください。復帰までに時間がかかると、その間に発生した新しいイベントが通知されない場合があります。