4

unistd.hでusleep関数を見つけたので、すべてのアクションの前にしばらく待つと便利だと思いましたが、信号を受信しない場合はスレッドがスリープするだけであることがわかりました。たとえば、ボタン(私はOpenGLを使用していますが、質問はtime.hとunistd.hについてより具体的です)、スレッドが目覚め、私が望むものを取得できません。time.hには整数を受け入れるsleep関数がありますが、整数が多すぎるので(0.3秒待ちたい)、usleepを使用します。ミリ秒単位で時間をかける関数があるかどうかを尋ねます(GNUまたは任意のライブラリから)。time()のように機能するはずですが、秒ではなくミリ秒を返します。それは可能ですか?

4

2 に答える 2

10

あなたがブーストを持っているなら、あなたはこのようにそれをすることができます:

#include <boost/thread.hpp>

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

この単純な例は、コードでわかるように、2000ミリ秒間スリープします。

編集:

わかりました、質問は理解できたと思いましたが、コメントを読んだので、もうよくわかりません。

おそらく、あるポイント/イベントから何ミリ秒経過したかを取得したいですか?その場合は、次のようなことを行うことができます。

#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;
}

(長蛇の列を許してください)

于 2012-04-11T16:23:07.200 に答える
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
}
于 2012-04-11T15:52:00.213 に答える