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

    KAB-studio.h


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

    送信日： 2005/03/07(Mon) No.297
    配信数： 1978
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

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

・２月表紙壁紙追加！
　毎月恒例、新しい表紙壁紙です。
　今回は卒業式なハオシャオです。高校の時からこの娘は……。
　ダウンロードは CG Gallery にて。
[ CG Gallery ]
http://www.kab-studio.biz/CG/Gallery/index.html#KAB_studio_200503_1024

・ほとはー外伝３に１ページ追加
　三人合体ホットハーブ 外伝３に P.08 を追加！
[ 三人合体ホットハーブ 外伝３ 【ワタシ の キロク】 ]
http://www.kab-studio.biz/Comic/HotHerbA3/index.html

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

2005/02/27 (Sun)
　午前中に JavaA2Z 。お昼にぷらとわ書き。ぷらとわのこれからの予定。
JavaA2Z の検索機能を実装。プログラミングしたくなる。そして歯医者。

2005/02/28 (Mon)
　JavaA2Z正式リリース。３月末までに１００単語。 JavaA2Z の自信が付い
た。あとはログイン機能とか……。午前中は単語追加。３時から歯医者。そ
のあとはビデオのダビングとか。３月は方針転換しよう。ひとつずつ片付け
た方がいい？

2005/03/01 (Tue)
　ずっと表紙壁紙描いてた。主線をパスで描いてて、時間掛かってる。３月
の予定。あまり急がず、スパン長く見よう。ゲームする。「萌えJava本」の
目処を付けたい。実際の労働時間。失業給付が切れてからどうなってるか。

2005/03/02 (Wed)
　昨日の夜中は表紙壁紙のパスを引いて太極拳して。午前中は洗濯と野菜
スープ作り。１時にハローワークの「雇用保険説明会」を受ける。就職活
動しないといけないらしい。給付制限なくなったので次の失業認定日から
失業給付が受けられます。花粉症？　オフミの店の予約取れました。そし
て初心。

2005/03/03 (Thu)
　３月表紙壁紙完成！　高校卒業時のハオシャオです。その制作過程。
ハオシャオに頼りすぎ。今日はこれだけ。そして firefox と CSS。そして
サラリーマン。

2005/03/04 (Fri)
　昨日の夜中は JavaA2Z のプチバージョンアップ。今朝は１１時半起き。
２時半まで単語追加。３時から歯医者。今日は早かったけどこれからかなり
大変らしい。横浜で Fate イメージアルバム「Wish」とか購入。なんかあん
まりできなかった……。

2005/03/05 (Sat)
　午前中は単語を追加してあとはのんびり。午後はほとはー外伝３描き。夜
１１時までやって３ページしか描けなかった。明日も描きます。描き上がっ
たのを読むといい感じ。 sakusaku DVD 発売中止！？

////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
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]

////////////////////////////////////////////////////////////////////
/*                           JavaA2Z                              */
http://www.kab-studio.biz/Programing/JavaA2Z/index.html

■追加・更新単語
Iterator 
イテレーター 
Collection 
Arrays 
HashMap 
コレクション 
ArrayList 
XML 
StringBuffer 
+ 
+演算子 
JVM 
仮想マシン 
コンパイル 
コンパイラ 
ソースファイル 
クラスファイル 
定義 
宣言 
JAR 
jarファイル 
クラスライブラリ 
Software Development Kit 
SDK 
ライブラリ 
Application Program Interface 
Application Programming Interface 
API 
型 
クラス 
変数 

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

　Version 14.30
スレッドを途中で止める

「前回はとりあえずスレッドで検索するようにしました」
『マルチスレッドになったからダイアログとか固まらなくなったけど、でも
まだまだだよね』
「具体的には、次の機能がまだ残っています」

・検索対象フォルダの表示
・検索結果の表示
・キャンセル機能
・検索終了時にキャンセルダイアログを閉じる機能

「今回はこのうち」

・キャンセル機能

「を作ってみます」
『おお』
「さて、まずはコードから。以前のコードをちょこっと修正します」

// ストッパー。
bool g_bIsStop = false;
// このストッパーをオンにする関数。
void SetStopOn()
{
    g_bIsStop = true;
}

/*
    指定したフォルダからファイルを検索します。
    戻り値として一致数を返します。
 */
int CountMatchFile
    ( const char * const p_pchFolderPath
    , const char * const p_pchFileName 
    )
{
    int iNum = 0;

    // ストップポイント１。
    if( g_bIsStop == true )
    {
        return 0;
    }

    // 検索するフォルダをカレントディレクトリにします。

// 略...

    do
    {
        // ストップポイント２。
        if( g_bIsStop == true )
        {
            return iNum;
        }

// 略...

    return iNum;
}

// StartCountMatchFile() と CSearchDlgDlg::OnSearchStart() は
// 前回と同じ。

『だいぶはしょってるね』
「全部載せるとかなり長いから……〈略〉のところは前回のコードを参考に
してください」
『で、具体的にはどこが変わってるの？』
「まず、ストッパーを追加しました」

// ストッパー。
bool g_bIsStop = false;

「この変数が false の間だけ検索する、ってします。この変数が true に
なったら検索をストップします」
『？　こんなんでいいの？』
「いいんです。実は、スレッドを〈強制的に止める〉のは良くないんです」
『え、そうなの？』
「プログラムが動いているのを無理矢理止めるようなもんだからね」
『う、それはヤバそう……』
「だから、プログラムの方でこういうフラグを用意して、プログラムの中で
普通にスレッドを終わらせるようにするんです」
『普通にスレッドを終わらせる？』
「そう。たとえば」

    // ストップポイント１。
    if( g_bIsStop == true )
    {
        return 0;
    }

『あ、 true なら関数から抜ける……あ、そっか、別スレッドで呼び出した
関数から抜けたら、そのスレッドもなくなるんだもんね』
「そういうこと。スレッドを途中で止める、ってことは、本当の意味で止め
るんじゃなくて、スレッドで呼び出した関数を、何もせずにすぐに終わらせ
るってことなんです」
『……それって難しくない？　今回はループしたり再帰呼び出ししてるから
いいけど、そういうのじゃなくて、たとえばネットワークとかなんとか？』
「そうだね、他の関数を呼び出して、その関数がすごく時間掛かる場合には
この方法じゃ無理だね……でも強制的に止めるのはやっぱり危険」
『むー、できるだけこの方法でってことね……』
「このフラグチェックの方法が一番簡単だからね。今回は、これを２箇所で
しています」
『関数の頭と、検索中のループでね。再帰呼び出しのループではしなくてい
いの？』
「そっちはすぐ関数を呼び出すわけだから、その関数の頭のチェックで」
『そか、そこですぐ返ってくからいいんだ。あ、あとこれ』

// このストッパーをオンにする関数。
void SetStopOn()
{
    g_bIsStop = true;
}

『これなに？　使ってないんだけど』
「これから使うんです。キャンセルボタンがあるダイアログは？」
『検索中ダイアログ』
「そのダイアログを操作するクラスは？」
『 CSearchingDlg クラス』
「そのクラスがあるファイルは？」
『？　SearchingDlg.cpp とか SearchingDlg.h のこと？』
「そう。で、今コード書いたファイルは？」
『 SearchDlgDlg.cpp だよ』
「そう、最初に表示されるダイアログだからね」
『……で？』
「で、キャンセルボタンが押されたときにストッパーをオンにしなきゃいけ
ないでしょ。それってつまり、 SearchingDlg.cpp のイベントハンドラから
SearchDlgDlg.cpp の g_bIsStop に値をセットしなきゃいけないってこと」
『……あ”、ファイル違うとアクセスできないんだっけ』
「ってゆーかその辺ってちゃんとはまだ教えてないからね……一応、 
Version 3.22 ( No.047 ) で教えてるんだけど」
『ん？　どのへん？』
「この中で」

CCalcApp theApp;
// のあとに、

CCalcApp& GetTheApp()
{
    return theApp;
}
// と書き足してください。

『あ、今回のと似てる』
「状況が同じだからね。この時は、他のファイルから theApp にアクセスす
る方法の説明」
『あー、だから関数作ってたんだね……こんときは、確かヘッダーファイル
の方に』

//    この下の行を追加。
CCalcApp &GetTheApp();

『って追加したんだ』
「というわけで、今回も同じようにします。 SetStopOn() は 
SearchDlgDlg.cpp にあるから、そのヘッダーファイル SearchDlgDlg.h に
次のコードを追加します」

class CSearchDlgDlg : public CDialog
{
// 略...
};

// この下の行を追加。
void SetStopOn();

「これで、他のファイルから SetStopOn() を呼べるようになります」
『おー』
「次に、キャンセルボタンのイベントハンドラを追加します。【検索中】
ダイアログの【キャンセル】ボタンで右クリック、メニューから
【イベント】を選んで、ダイアログで【追加と編集】を選んで」
『いつものイベントハンドラ作るのだね。【メンバ関数の追加】ダイアログ
で【OnCancel】って表示されてる。そのままOKしちゃうね』
「うん。そのイベントハンドラで」

void CSearchingDlg::OnCancel() 
{
    // ストップさせます。
    SetStopOn();

    CDialog::OnCancel();
}

『お、呼び出してる呼び出してる！』
「これを呼び出せば g_bIsStop が true になります。ただし、あとひとつ
修正が必要です」
『え、どこ？』
「ヘッダーファイルの追加。このイベントハンドラがある SearchingDlg.cpp
の上の方で SearchDlgDlg.h のインクルードををする行を追加してください」

// SearchingDlg.cpp : インプリメンテーション ファイル
//

#include "stdafx.h"
#include "SearchDlg.h"
// 下の行を追加。
#include "SearchDlgDlg.h"
// 上の行を追加。
#include "SearchingDlg.h"

「これをしないと、さっき追加した」

void SetStopOn();

「が見えないから」
『う、めんどい……』
「まぁ、ちゃんと説明してないからね……とりあえず、これでどう？」
『あ、うん。ビルドして実行、検索開始……キャンセルっ！　お！　ちゃん
とキャンセルできた！』
「フラグを用意して、スレッドで呼び出す関数の中でそれをチェック、
キャンセルボタンが押したときにそのフラグを立てる」
『仕組みとしては結構簡単ねー』

/*
    Preview Next Story!
*/
『やっとキャンセル機能ができたね。次はどれ？』
「次は残り全部」
『え、３つ全部？』
「そう。でも次の次の回」
『じゃあ次回は？』
「コードだけ」
『げ』
「というわけで次回」
＜ Version 14.31 スレッドからダイアログに表示する ＞
『につづく！』
「来週は読まなくてもいいかも」
『それもどうかな……』

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

・ほとはー外伝３に１ページ追加
　三人合体ホットハーブ 外伝３に P.09 を追加予定。

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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
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 - 2005 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz
*/
////////////////////////////////////////////////////////////////////

