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