6

UNIX と Windows の両方で、C の JavaScript setTimeout に似たものに興味があります。

基本的に、私は欲しい:

start_timer(&function_pointer, int time_in_secs)

または私が得ることができる限りそれに近い。

また、setInterval に似たもの (n 秒ごとにコールバックを呼び出す) も良いでしょうが、それは setTimeout を使用して実装できます:)

4

5 に答える 5

8

コールバックとしてTimerProcを使用するWin32のSetTimer 。

/* calls TimerProc once every 60000 milliseconds */
SetTimer(NULL, 1, 60000, TimerProc);
于 2009-05-15T02:01:49.130 に答える
5

POSIXインターバルタイマー、timer_createおよびtimer_settimeを試してみることをお勧めします。これにより、シグナルを使用せずにコールバック関数を直接指定できます。タイマーを1回だけ期限切れにする(繰り返し続けない)には:

timer_settime:タイマーのリロード値は、valueのit_intervalメンバーによって指定された値に設定されます。タイマーがゼロ以外のit_intervalで準備されている場合、定期的(または反復的)タイマーが指定されます。

以下は、kernel.orgのLinuxプログラマーマニュアルの良い例とともに、これらのタイマーの使用に関する広範なドキュメントです。

timer_create-POSIXのプロセスごとのタイマーを作成します

于 2009-05-15T03:50:42.940 に答える
2

UNIX の場合は、man setitimer.

于 2009-05-15T01:13:09.590 に答える
1

alarm() と setitimer() に関するいくつかの情報は、ここで見つけることができます。upcall 関数はシグナル ハンドラーであるため、ここで詳細に説明されているように、シグナル ハンドラーに関連するすべての制限と制限の対象となることに注意してください。

最初のリンクで述べたように、alarm() は POSIX ベースですが、setitimer() はそうではありません (より柔軟ですが)。

于 2009-05-15T01:24:16.723 に答える
-1

試してみてください。移植可能なコードが必要な場合、それらよりも移植性の高いものを作成できない可能性が高くなります;)

http://library.gnome.org/devel/glib/2.20/glib-The-Main-Event-Loop.html#g-timeout-add

于 2009-05-15T01:19:07.140 に答える