クライアント/サーバ:イベント学習

2017-01-29 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
以前(2017-01-23)の記事「クライアント/サーバ:プロセス間通信」では、

  ・・・・・
  ・・・・・
  それには、
  イベントオブジェクト の学習が必要ですね。
  ・・・・・
  ・・・・・

で終わっていた。

その後、
双方向パイプ1本で送受信を行いたくて、
イベントに関する記事を検索した。


検索の結果、
学習教材としたのは;
“プログラミング入門サイト ~bituse~”の
“WINAPI入門ページ”の中の1つ:
プロセス・スレッド間の同期(イベント)
  今回はプロセス・スレッド間の同期(イベント)について説明します。

  過去二回は排他制御についてやってきましたが、
  今回はプロセス・スレッド間で行う同期処理の仕組みを説明します。
  イベントという仕組みを使って同期処理を行うのですが、
  何かのイベントが発生したときに、シグナル・非シグナル状態を切り替える、
  というだけの単純な仕組みです。
  排他制御ではありませんので、同時に実行されてしまいます。
  何かの動作をした時にシグナル・非シグナルを切り換える、
  というだけの単純なものです。
  ただそれを、スレッドはもちろん、プロセス間でも共有できる
  というのが大きいですね。
  ・・・・・
  ・・・・・

と云うことで、学習した。


ポイントは:
1.CreateEvent関数を使って、イベントオブジェクトを作成
2.OpenEvent関数を使って、イベントオブジェクトハンドルを取得
3.SetEvent関数ResetEvent関数を使って、シグナルを on/off
ですね。
でも、“CreateEvent”は“CreateEventA”だった。
それから、WaitForSingleObject関数も欲しい。これについては、MSDN(英文)を参照


要約(プロトタイプ宣言形式):
ffi.cdef[[
// CreateEvent関数:イベントオブジェクト作成
HANDLE CreateEventA(
LPSECURITY_ATTRIBUTES lpEventAttributes, // セキュリティ記述子
BOOL bManualReset, // リセットのタイプ
BOOL bInitialState, // 初期状態
LPCTSTR lpName // イベントオブジェクトの名前
);
// 第一引数:NULLを指定するとデフォルト値
// 第二引数:非シグナル状態に戻す時は、手動で(TRUE)、自動で(FALSE)を指定
// 第三引数:初期シグナル状態指定:TRUEでシグナル状態、FALSEで非シグナル状態
// 第四引数:イベントオブジェクトの名前を指定
//   成功すると、イベントオブジェクトのハンドルが返ります。


// OpenEvent関数:イベントオブジェクトのハンドル取得
HANDLE OpenEventA(
DWORD dwDesiredAccess, // アクセス権
BOOL bInheritHandle, // 継承オプション
LPCTSTR lpName // イベントオブジェクトの名前
);
//   普通に使うには、
// 第一引数にEVENT_ALL_ACCESS、
// 第二引数にFALSE、
//   成功すると、イベントオブジェクトのハンドルが返ります。


// SetEvent関数:イベントをシグナル状態にする
BOOL SetEvent( HANDLE hEvent ); // イベントオブジェクトのハンドル
// ResetEvent関数:非シグナル状態にする
BOOL ResetEvent( HANDLE hEvent ); // イベントオブジェクトのハンドル


// WaitForSingleObject関数:
DWORD WaitForSingleObject(
HANDLE hHandle, // オブジェクトのハンドル
DWORD dwMilliseconds // タイムアウト時間:ミリ秒(ms)単位で指定
);
// タイムアウト時間が経過すると、非シグナル状態であっても、制御を返す。
// 0 を指定すると、指定されたオブジェクトの状態を調べ、即座に制御を返す。
// INFINITE を指定すると、シグナル状態になるまで待機し続ける。
//   関数が成功すると、
// WAIT_ABANDONED:オブジェクトは、放棄された
// WAIT_OBJECT_0 :オブジェクトがシグナル状態になった
// WAIT_TIMEOUT :タイムアウト時間が経過。非シグナル状態であった
//   関数が失敗すると、WAIT_FAILED が返る。
]]
ですね。


そこで、
プログラムを2本作って、動作確認しようとしたが、
“EVENT_ALL_ACCESS”の値が・・・・・分からない?


もっと学習が必要だ。


本日はここまで。


“クライアント/サーバ”学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170109
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク