////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2004 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz

    送信日： 2004/10/25(Mon) No.279
    配信数： 2042
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                ２００４年１０月２５日（月）の更新              */
http://www.kab-studio.biz/index.html

・ほとはーお休み……
　ごめんなさい、三人合体ホットハーブはお休みです……来週は必ず追加
します。
[ 三人合体ホットハーブ ]
http://www.kab-studio.biz/Comic/HotHerb/index.html


////////////////////////////////////////////////////////////////////
/*                        ちょお普通な日記                        */
http://www.kab-studio.biz/nikki2/index.html

2004/10/17 (Sun)
　８時半に目が覚める。午前中に洗濯とか色々。午後はぐだーっと。なんか
ほとはーが乗り切れない……。そして大作。そしてメール。

2004/10/18 (Mon)
　今日もバグ潰し。またタクシー勧められる。アニメとかタイマーとか。
薄給なんだから頼らないで。

2004/10/19 (Tue)
　謎のバグ対策に System.out.println() ２００行。５人３日で１００個。
美鳥の日々最終巻いい感じ。西武勝利〜。そして次のおしごとの話。現在の
詳細な状況。そしてやること。

2004/10/20 (Wed)
　午前中は次のプロジェクトの面接。午後からこつこつ修正。今月で抜けら
れそうっぽい？　土日休めそう。１１月からはまた忙しいっぽい。冬コミの
予定。

2004/10/21 (Thu)
　サービスインでお客様怒る。おしごと的には特になく。 Intuos3 を買う
かなぁ。そして戻りたい。ホント戻りたい……。

2004/10/22 (Fri)
　サービスイン後の初日でバグ出まくり。それをがーっと潰す。今回のシス
テムって……。土曜休出（泣）。かなりぎりぎりかも……。そして南武線沿
い。

2004/10/23 (Sat)
　今日は休出。へろへろ……。地震来るし……。ほとはーピンチ。休出残業
で結構稼げてる。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.biz/Novel/Fuga/index.html

■　第十一章　ファインダウト社　−６−

　ファインダウト社。
　都心のビル街に建つ、２０階建てのビル。敷地内には公園のような所もあ
り、１階にはコンビニもあった。
「……なんか、すごく普通のビルね……」
「外はね」
　と言われたが、中も至って普通のビルだった。ロビーは３階まで吹き抜け
になっていて、その下の受付で少年が右手を筒に入れる。
「何してるの？」
「生体照合」
「てっきり顔パスなんだと思っていた」
「僕を作る技術があれば、似せて作ることだってできるから」
「なるほど」
「あと、これに署名を」
　バインダーに挟まれた紙には、難しいことが書かれている。
「危険なことはしない、他に口外しない、そういうこと」
「そっか。はい」
　残り３つを母親に渡し、そのうちのふたつを俊雄と恭子に渡す。
「言っておくけど」
　と、舞は釘を刺す。
「それ書いたら後戻りできないからね。みんな揃ってうちにいれば、お母さ
んもお兄ちゃんもいるんだから安心だと思う。俊雄も恭子も、この中に入る
必要はないんだから」
「私はいいの？」
「お母さんはいいの」
　……ひとりは心細い、とは言わずに。
「はい」
　真っ先に提出したのは恭子だった。
　すぐに残りのふたりも差し出す。
「これを首から下げて」
　ひも付きのパスには、それぞれの顔写真が付いていた。
「いつの間に……」
「じゃ、行こうか」
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
　すべての机が片側に押しやられた教室は、即席のリングとなった。
　高士がステップを踏み、ジャブとストレートを放つ。それをシーバリウは
バックステップしつつ躱す。ふたりはダンスを踊るように教室を回る。リズ
ム良く流れる風を切る音とステップ音。
「ちょっ、王子！！」
　戦いが始まった！

Machician 第２話 好きとスキと 好評連載中！
[ Machician ]
http://d.hatena.ne.jp/kab_studio/20040823#1093276416
[ Machician＋設定 最新一覧 ]
http://d.hatena.ne.jp/kab_studio/searchdiary?word=*%5BMachician
_______________________________________________________________[KCM]

////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

　Version 14.12
イベントを使おう！

「同期オブジェクト４つめはイベントです」

イベント （ Event ）

『イベントって、催し物のイベントと同じ？』
「意味としては同じだけど、そこにはあまりこだわらない方がいいかも。同
期オブジェクトとしての【イベント】は、たぶん同期オブジェクトの中で一
番わかりやすくてシンプルです」
『今までのもそんなに複雑じゃなかったけど』
「でも〈バトン〉って概念は今までなかったでしょ。イベントは、簡単に言
うと〈ただのスイッチ〉」
『うわ簡単そう』
「でも、関数の数は一番多いです」

HANDLE g_hEvent = NULL;
const char *const EVENT_NAME= "ProcessesEvent";

// イベントを作成します。
void Create()
{
    g_hEvent = CreateEvent( NULL, TRUE, FALSE, EVENT_NAME );
    TRACE( "%x\n", g_hEvent );
}

// イベントを取得します。
void Open()
{
    g_hEvent = OpenEvent( EVENT_ALL_ACCESS, FALSE, EVENT_NAME );
    TRACE( "%x\n", g_hEvent );
}

// イベントをセットします。
void Set()
{
    BOOL b = SetEvent( g_hEvent );
    TRACE( "%d\n", b );
}

// イベントを監視して待機状態に入ります。
void Wait()
{
    TRACE( "待機開始。\n" );
    DWORD dwResult = WaitForSingleObject( g_hEvent, 50000 );

    if( dwResult == WAIT_TIMEOUT )
    {
        TRACE( "タイムアウト。\n" );
    }
    else
    {
        TRACE( "待機終了。\n" );
    }
}

// イベントをリセットします。
void Reset()
{
    BOOL b = ResetEvent( g_hEvent );
    TRACE( "%d\n", b );
}

// イベントを一瞬だけオンにします。
void Pulse()
{
    BOOL b = PulseEvent( g_hEvent );
    TRACE( "%d\n", b );
}

// イベントを削除します。
void Close()
{
    CloseHandle( g_hEvent );
}

『うわ、７つもある！』
「関数だけ抜き出すとこんな感じ」

void Create()
void Open()
void Set()
void Wait()
void Reset()
void Pulse()
void Close()

『 Release() や Cancel() の代わりに…… Reset() かな？』
「そうだね。 Set() Reset() Pulse() がイベント独自のもの。この３つで
イベントを操作します」
『 Pulse() って想像つかない……』
「では、ひとつずつ関数を見ていきます。まずはハンドルと名前」

HANDLE g_hEvent = NULL;
const char *const EVENT_NAME= "ProcessesEvent";

『他のと同じ、名前で区別するのね』
「この辺はどの同期オブジェクトも一緒。次にイベントの作成」

// イベントを作成します。
void Create()
{
    g_hEvent = CreateEvent( NULL, TRUE, FALSE, EVENT_NAME );
    TRACE( "%x\n", g_hEvent );
}

『真ん中の TRUE と FALSE が謎』
「第２引数の TRUE は、プログラムでイベントのセットとリセットを切り替
えられるようにするためのもの。第３引数の FALSE は、最初の状態。 TRUE 
だとセット、 FALSE だとリセット」
『セットとかリセットとかよくわかんない』
「言い換えると」

セット　：シグナルがオンの状態
リセット：シグナルがオフの状態

『ああ！』
「ここで重要なのは、イベントは〈シグナルの状態がずっと維持される〉と
いうことです」
『どゆこと？』
「ミューテックスを思い出して」
『 Version 14.06 ( No.273 ) さんしょー』
「ミューテックスはバトン。ミューテックスはバトンを渡した瞬間に渡した
相手だけシグナルをオンにしました」
『だから他の待ってるのはシグナルがオフのまま、待ち続けてたね』
「対して、イベントはちょっと特殊。まずリセット＝シグナルがオフの場合
には、各プロセスがこのイベントを監視すると待機しつづけます」
『シグナルがオフなんだからそうだよね』
「そこで、イベントをセット＝シグナルをオンにすると、待機している全て
のプロセスにシグナルオンが伝わります」
『ひとつだけじゃないんだ！』
「しかも、シグナルがオンの状態が維持されるので、このあと他のプロセス
が監視しても、シグナルがオンだからすぐに待機終了します」
『はー、なんかそれって、ホントの意味での信号って感じね』
「そうだね。セットは青、リセットは赤。イベントはそういう使い方をする
同期オブジェクトなんです」
『ホントに他の同期オブジェクトよりもわかりやすい……』
「他の同期オブジェクトは〈シグナルがひとつのプロセスにしか送られな
い〉とかのわかりづらい点があるからね。さて、話を戻すと、この例では
第３引数が FALSE なので、最初の状態はリセットになっています」
『シグナルがオフってことね』
「この状態を変更するのが次のふたつの関数」

// イベントをセットします。
void Set()
{
    BOOL b = SetEvent( g_hEvent );
    TRACE( "%d\n", b );
}

// イベントをリセットします。
void Reset()
{
    BOOL b = ResetEvent( g_hEvent );
    TRACE( "%d\n", b );
}

「 SetEvent() はセット＝シグナルオンに、 ResetEvent() はリセット＝
シグナルオフに切り替えます」
『これで切り替えるわけね』
「あともうひとつ、特別な関数があります」

// イベントを一瞬だけオンにします。
void Pulse()
{
    BOOL b = PulseEvent( g_hEvent );
    TRACE( "%d\n", b );
}

「この PulseEvent() は、一瞬だけセットして、すぐリセットにする関数で
す」
『スイッチをカチャカチャって切り替える感じ？』
「そういうこと。一瞬だけシグナルがオンになるから、待機してるすべての
プロセスはすぐに待機終了になります」
『で、すぐにシグナルオフに戻るから、そのあとで監視すると待機しっぱな
しってわけね』
「そういうこと。この関数は、とりあえず待機してるものすべてリセットし
たい場合に使います」
『でも SetEvent() でもいいんじゃない？』
「 SetEvent() はずっとシグナルオンのままだからね。たとえば待機してい
る数を数えておいて、１０になったらすぐリセット、その１０だけ処理をさ
せて、そのあと監視しに来たらそれは待機してもらう、で、それが１０にな
るまで」
『ってゆーのを繰り返すわけね。並んで１０人だけ入っていい、みたいな感
じ？』
「そういうこと。イベントはそういう使い方もできるってことで」

/*
    Preview Next Story!
*/
『んー』
「どうしたの？」
『他の同期オブジェクトと違うから違和感が』
「こっちの方がわかりやすいのに」
『それはそうなんだけど……』
「というわけで次回」
＜ Version 14.13 イベントを使ってみる！ ＞
『につづく！』
「やっぱ染まってるんじゃない？」
『それは認めない！！』


////////////////////////////////////////////////////////////////////
/*                ２００４年１１月１日（月）の更新                */
http://www.kab-studio.biz/index.html

・ほとはーに１話追加
　三人合体ホットハーブに一話追加します。


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.biz/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
http://www.mag2.com/m/0000012198.htm
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.biz/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.biz/Info/MailMagazine/

    (C)KAB-studio 1999 - 2004 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz
*/
////////////////////////////////////////////////////////////////////

