1

私は Node.js の C コードを書いており、同期呼び出しと非同期呼び出しを区別したいと考えています。つまり、コードがメイン イベント ループ内から呼び出された V8 イベント ディスパッチ スレッドで実行されているのか、別のワーカー スレッドから呼び出されているのかを検出したいと考えています。前者の場合はすぐに JavaScript にコールバックできましたが、後者の場合はより複雑な非同期コールバックを使用する必要がありました。

libuv スレッド化 APIuv_thread_self、現在のスレッドを識別し、uv_thread_equalスレッドが等しいかどうかを比較するために提供します。必要なのはuv_thread_t、メイン イベント ループの を見つけることだけです。

4

2 に答える 2

0

Linux (およびおそらく MacOS と Solaris) では、以下を参照できますbacktrace()

backtrace()が指す配列に、呼び出し元プログラムのバックトレースを返しますbuffer。バックトレースは、プログラムの現在アクティブな一連の関数呼び出しです。

そしてそれは友達ですbacktrace_symbols():

backtrace()in buffer によって返されたアドレスのセットを指定backtrace_symbols()して、アドレスをシンボリックに記述する文字列の配列に変換します。size 引数は、バッファ内のアドレス数を指定します。各アドレスのシンボリック表現は、関数名 (特定できる場合)、関数への 16 進数のオフセット、および実際の戻りアドレス (16 進数) で構成されます。

http://linux.die.net/man/3/backtrace

Windows では、次の質問が同様の機能を実現する方法を示していると思います: http://bewitchingkitchen.com/2010/01/30/slow-roasted-chicken-thighs-an-ice-breaker/

于 2015-01-30T13:39:50.497 に答える