3


Erlang で高解像度のタイマーを作成できるかどうか知っている人はいますか?
ドキュメントによると、すべてのタイマーとタイムアウトはミリ秒単位で測定されます。
マイクロ秒単位で遅延させる必要があります。たとえば、次の
timer:apply_after(MilliSec, Module, Function, Arguments).
ようなものの代わりに
timer:apply_after(MicroSec, Module, Function, Arguments).

4

2 に答える 2

3

実際、すべてのタイマーとタイムアウトのプリミティブはミリ秒単位です。

ミリ秒未満のタイマーを実現するには、次の 2 つの方法が考えられます。

  • Erlang プリミティブを使用して、切り捨てられたミリ秒数を待機してから、ビジー ループで調整します。erlang:now()単調であることが保証されているため、リアルタイム関数ではないことに注意してください(これは非常に高価です)。os:timestamp()代わりに使用する必要があります。
  • タイマーが起動したときにメッセージを送信するスレッドを生成するネイティブ コードを記述します。これは、NIF として簡単に実装できます。
于 2013-09-27T14:39:47.363 に答える