喫茶XRAYトップページ


[9058] 再帰的処理返信 削除
2015/8/3 (月) 13:51:49 Mr.XRAY
[817_ディレクトリとファイルのリスト]
http://mrxray.on.coocan.jp/Delphi/plSamples/817_DirFileListTest.htm

に,「ディレクトリの再帰的な検索」の意味というか,説明を追加しました.
[備考]として.
こんなのはですね.自分で調べるんですよ.
と思って,ググってみたら,う〜む.確かに分かりにくい....
ムムム.

私が初めてこの用語に接したのは,記憶によると,階乗の計算だったと思います.
意味について悩んだ記憶はないですね.
ほら,性格が素直だから.そのまま受け入れたんです (^^;


[9076] Re:再帰的処理返信 削除
2015/8/8 (土) 14:02:08 taki
▼ Mr.XRAYさん
 
> 私が初めてこの用語に接したのは,記憶によると,階乗の計算だったと思います.
> 意味について悩んだ記憶はないですね.


再帰的とかコールバックとかは理解しにくい内容ですね。

再帰的処理は「自分を自分の中で呼び出す」事に違和感がありますね。
まあ、自分を呼び出した時点でコピー(クローン?)の自分が動き出すと
思えばいいのでしょうか。孫悟空みたいに。
大事なのは、自分の守備範囲の仕事が済んだら帰る(return)事ですね。
帰るたびにコピーが消えていって、最後に大元の関数が終わる感じです。
これであってます?

コールバックがもうひとつ理解しにくいです。
APIにEnumXXXという関数があり、その関数の引数に自分が書いた関数を
登録すると、EnumXXX関数が適当な時に自分の書いた関数を呼び出して
くれると言う物だったと思います。^_^;
それで、私が理解できていない事の一つに、APIのEnmuXXXという関数をコール
バック関数というのでしょうか、それともEnumXXXに呼び出される自分が
書いた関数をコールバック関数というのでしょうか。
もう一つ、ウィンドウの一覧とかフォントの一覧とかで使われるのですが、
最初からTListに一覧で返してくれたいいと思うんですけどね。

> ほら,性格が素直だから.そのまま受け入れたんです (^^;

私はひねくれているので、抵抗があります。


[9077] Re2:再帰的処理返信 削除
2015/8/8 (土) 20:19:27 taki
甘えるな〜! とお叱りを受けそうなので調べました。

呼び出す側の関数Aに引数として渡される関数Bがあるとすると、
呼び出される関数Bがコールバック関数なんですね。

APIのEnmuXXXはもちろん呼び出す側の関数Aに該当するのですが、
自分で書いた関数でも、他の関数を引数で呼び出すように書けば
関数Aになるようです。
関数の名前をEnmuXXXにする必要もないようです。



[9078] コールバック関数返信 削除
2015/8/8 (土) 20:38:33 taki
OSでしか分からないタイミングって何かを考えました。

例えば、連続WAVEファイルの再生とかは、再生するファイルが複数個あって、
順次ファイルからバッファへデータを読み込んで、バッファの内容を再生する
事になるのですが、この「今のバッファ分の再生が終わりましたよ〜、次の再生の
バッファに切り替えますよ〜」のタイミングはOSでしかわからないんですよね。

連続WAVEファイルの再生の場合は、ウィンドウズのメッセージが知らせてくれる
のですが、このメッセージの内容で呼び出される関数もコールバック関数と
言うのでしょうか?


[9080] Re:コールバック関数返信 削除
2015/8/8 (土) 21:52:23 Mr.XRAY
▼ takiさん

> 連続WAVEファイルの再生の場合は、ウィンドウズのメッセージが知らせてくれる
> のですが、このメッセージの内容で呼び出される関数もコールバック関数と
> 言うのでしょうか?


これはどうなんでしょうね.
その関数が HogeCallBackProc という名前だとして,
  HogeHogeMessages(Handle, @HogeCallBackProc);
というように定義したときに,この HogeCallBackProc という関数内で
その該当メッセージを処理できれば,あるいは処理できるようすれば,
コールバック関数と言ってもいいのかも知れません.かな ?

う〜む.わからん.


[9079] Re3:再帰的処理返信 削除
2015/8/8 (土) 21:44:17 Mr.XRAY
▼ takiさん

> 甘えるな〜! とお叱りを受けそうなので調べました。

そんなこと,誰も言わないもん !

> 呼び出す側の関数Aに引数として渡される関数Bがあるとすると、
> 呼び出される関数Bがコールバック関数なんですね。

  (以下,略)

ですよね.

>最初からTListに一覧で返してくれたいいと思うんですけどね。

確かに (^^;
まっ,でも,おそらく,マイクロソフトとしては,いろいろ考えて,
汎用性のある方法として,コールバックという方式を考えたのではないかと...
いえ,別にマイクロソフトの肩を持つわけじゃあないですけど.


INCM/CMT
Cyclamen v3.82