2

こんにちは、コールバック関数の使用法を知りたいです。誰でも簡単な例で親切に説明できますか。

私のプロジェクトでは、コール スタックで User.dll!546383c() として示されている関数によって、特定の CallBack 関数が突然呼び出されていることがわかります。

誰がこのコールバックを呼び出しているのか、いつ発生するのか、本当に混乱しています。

コール スタックは、ポイント (つまり、関数 A() 呼び出し B() 呼び出し C() など) まで良好に見えますが、突然何かが発生し、User.dll の一部の関数がこのコールバックを呼び出します。だから私は関数の追跡を失います。

誰でも例を挙げて親切に説明できますか。前もって感謝します。

4

2 に答える 2

2

こんにちは、コールバック関数の使用法を知りたいです。誰でも簡単な例で親切に説明できますか。

これについては多くを語ることはありません。コールバックは、一部のライブラリまたはシステム コードがクライアント/アプリケーション コードでイベントを処理できるようにするためのメカニズムです。たとえば、次のようなコールバックがあるとします。

  • いくつかのタイマー/アラームの満了
  • ファイル、ネットワーク、キーボード/コンソールなどからの読み取りまたは書き込みの完了、またはプログラムの読み取りまたは書き込み機能の変更 (バッファー サイズの制限に基づく)、または新規/紛失などの I/O イベント接続
  • いくつかの非同期処理の完了 (たとえば、別のスレッドが計算を行っている)
  • 一部の非同期処理での予期しないエラー
  • 特定の状態にあるプロセスをガイドする機会 (たとえば、特定のクライアントを受け入れるかどうかを決定し、その後、呼び出し元が切断するか、非同期クライアント処理を開始します)

user.dll がたまたまコールバックを返しているのはなぜですか? あなたのプログラムやそれが何をしているかについて、あなたは何も教えてくれませんでした。

論理的なレベルでは、スレッドがキューに入れられたメッセージをチェックする (場合によっては待機するブロックでさえも) まで、コールバックがスレッドで実際にディスパッチされない場合や、コールバックがスレッドが別の処理を行うために行っていることを中断する場合があります。前者はイベントが C++ プログラムの他の部分によって作成される場合に一般的であり、後者はオペレーティング システムおよびハードウェア コールバック (Linux/UNIX の「シグナル」など) に一般的です。

于 2012-04-25T10:31:17.427 に答える
1

簡単に言うと、コールバックは関数ポインタのようなもので、ある関数がアプリケーション内の別の関数に報告 (コールバック) するように構成するために使用されます。例: このアプローチでは、ボタンのクリック、マウスの移動、メニューの選択、およびメモリ内の 2 つのエンティティ間の一般的な双方向通信などのイベントを処理できます。

したがって、コールバックをトリガーするのは、ユーザー入力または発生したその他の通信イベントである可能性があります。

于 2012-04-25T10:34:59.553 に答える