2012-04-11 24 views
4

私はunistd.hでusleep関数を見つけました。すべてのアクションの前にいくつかの時間を待つのが便利だと思っていました。しかし、スレッドがシグナルを受信しないとスリープするだけです例えば、私がボタンを押すと(私はOpenGLを使用していますが、time.hとunistd.hに関するより具体的な質問があります)、スレッドは目を覚まし、私は自分が望むものを得られません。 time.hには整数を受け付けるスリープ関数がありますが、整数が大きすぎます(私は0.3秒待っています)ので、私はusleepを使用します。 ミリ秒単位で時間をとる機能があるかどうか聞いてきます(GNUなどのライブラリから)。 これはtime()のように動作するはずですが、秒の代わりにミリ秒を返します。可能でしょうか?時間をミリ秒単位で表示する

+0

あなたがusleep' 'については好きではないかについて、より明確にすることはできますか?私はそれがあなたが欲しいものをまさにしていると言うことができるように近いです(よく、msの代わりにμsを除いて)。 –

+0

私は質問をしません。あなたは「ミクロタイム」ではないのですか? – nothrow

+0

問題はスリープ機能を必要としないが、「getTime in ms」関数です。スレッドがスリープ状態になると、何らかの信号で覚醒する可能性があります(キーを押すなど)。 –

答えて

4

これは私が使用してクロスプラットフォームの機能である:あなたはこのようにそれを行うことができ後押ししている場合は

unsigned Util::getTickCount() 
{ 
#ifdef WINDOWS 
    return GetTickCount(); 
#else 
    struct timeval tv; 
    gettimeofday(&tv, 0); 
    return unsigned((tv.tv_sec * 1000) + (tv.tv_usec/1000)); 
#endif 
} 
+0

私はtime()のような関数が必要ですが、それはmsを取得します。 –

+0

@RamyAlZuhouri:OK、私は自分の答えを編集しました。 – trojanfoe

7

#include <boost/thread.hpp> 

int main() 
{ 
    boost::this_thread::sleep(boost::posix_time::millisec(2000)); 
    return 0; 
} 

この簡単な例を、あなたはコード内で見ることができるように2000msの間スリープします。

編集:

[OK]を、私は質問を理解と思ったが、その後、私はコメントを読んで、今私はもうそれほどよく分かりません。

おそらく、いくつかのポイント/イベントから何ミリ秒経過したとしますか?その場合は、あなたのような何かを行うことができます:(長い行を許しなさい)

#include <boost/chrono.hpp> 
#include <boost/thread.hpp> 
#include <iostream> 


int main() 
{ 
    boost::chrono::high_resolution_clock::time_point start = boost::chrono::high_resolution_clock::now(); 
    boost::this_thread::sleep(boost::posix_time::millisec(2000)); 
    boost::chrono::milliseconds ms = boost::chrono::duration_cast<boost::chrono::milliseconds> (boost::chrono::high_resolution_clock::now() - start); 
    std::cout << "2000ms sleep took " << ms.count() << "ms " << "\n"; 
    return 0; 
} 

+2

"長い行を許してください" ......ああ素敵なブーストライブラリ:) – Marlon

+0

@マールンあなたはそうです! :-) – mantler

関連する問題