3


0

WindowsのSetTimerにOS Xで同等の機能はありますか? 私はCを使っています。

だから私はいくつかのソフトウェアのためのプラグインを書いている、そして私は定期的に呼ばれる機能を持っている必要がある。 Windowsでは、関数のアドレスをSetTimer()に渡すだけで、指定された間隔で呼び出されます。 OS Xでこれを簡単に行う方法はありますか? 可能な限り最小限にする必要があります。 私は、Web上にそれほど派手でないものを見つけることができませんでした。巨大なフレームワークと、別のスレッドを使用する別の解決策に関するものがありましたが、もっと簡単な方法があるはずです。

6 Answer


4


Cocoaでは、典型的な呼び出しは次のようになります。

NSTimer×

これにより、現在の実行ループにタイマーが設定されます。 タイマーが起動するたびに、それはあなたの機能を呼び出します。

後でタイマー通話をキャンセルしたい場合

[repeatingTimer invalidate]
;

それはrunloopからそれを削除します。


2


http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSTimer_Class/Reference/NSTimer.html[NSTimer]クラスをご覧ください。


1


単純にしたいのであれば、単にalarm()を使いませんか。

シグナルハンドラを SIGALRM`に設定してから alarm() `を呼び出して、遅れてシグナルを生成するようにOSに依頼します。 ここの例があります。


1


http://www.boost.org/doc/libs/1_40_0 / doc / html / boost_asio.html [Boost Asioライブラリ]の使用を検討してください。 クラス deadline_timerはすべてのプラットフォームで動作します。 bindを使ってhttp://www.boost.org/doc/libs/1_40_0/docに関数を追加するだけです。 /html/boost_asio/reference/basic_deadline_timer/async_wait.html[async_wait]を呼び出して、http://www.boost.org/doc/libs/1_40_0 / doc / html / boost_asio / reference / basic_deadline_timer / expires_from_now.html[expires.exp.expire.expires。

io_service io; deadline_timerタイマー(io);

void handler(){static int second_counter = 0; cout << second_counter << endl;

timer.expires_from_now(posix_time :: seconds(1)); timer.async_wait(bind(

int main(int argc、char * argv []){handler();

io.run(); }

Asioに慣れるまでには少し時間がかかりますが(特にドキュメントにはパッチが含まれているので)、学ぶ価値はあります。


0


自分のページにちょっとしたチュートリアルがあります

それはドイツ語だけですが、私はあなたがコードサンプルを理解すると確信しています。


0


http://pocoproject.org/[Poco C library]はクロスプラットフォームのhttp://www.google.com/codesearch/p?hl=nlを提供します。