2016-05-19 8 views
-2

Ubuntuでは、Qtを使ってC++でアプリケーションを開発しています。 QTimerを使用していますが、正確さが十分ではありません。私はミリ秒以上の解像度で何かを探しています。これを行う方法はありますか?Qtのサブミリ秒タイマー

私のコード:

temps= 0; 
dataTimer = new QTimer(); 
connect(dataTimer, SIGNAL(timeout()), this, SLOT(simuler())); 
dataTimer->start(1); 
+2

いかが 'usleep'(ALP本はtimerfd_createよりも古いですか)?または[POSIXタイマー](http://man7.org/linux/man-pages/man2/timer_create.2.html)を見てください。 –

+0

'QElapsedTimer'は非常に精度の高い時間を許しますが、残念なことにLinuxでは使用できません。必要な処理を行うサードパーティのタイマーがあるかもしれません。 –

+0

@JonHarper私に例を挙げてください – BkarimCe

答えて

3

私はあなたがいないが確実は(Linuxデスクトップがリアルタイムシステムではありません)実際に便利なアクションためのサブミリ秒の遅延を得ると確信しています。おそらくCONFIG_PREEMPTで自分のカーネルをコンパイルすると少し助けになるかもしれません!しかし、これは強い制限です(それを克服するためのソフトウェアトリックはありません)。

Karsten Koopとコメントされていますが、スレッドまたはPOSIXタイマーを使用している可能性があります。あなたは、C++ 11モードでコンパイル<chrono>を使用することを検討している場合、Dropはコメントしtime(7)

としても参照してください。(それは、多かれ少なかれは、C++ 11準拠した方法でclock_gettimeをラップ;あなたはメジャーにできるようになりますSOU小遅延)。あなただけ対策(ない行為)サブミリ秒の精度で時間にしたい場合は

A Linuxの具体的な解決策は

QSocketNotifierを使用して)timerfd_create(2)を使用してQtのメインループでそのFDをポーリングするかもしれません、ちょうど使用clock_gettime(2)

いくつかのQt操作は、実行するのに必要な時間が1ミリ秒以上必要です。そして、人間は、サブミリ秒の遅延を知覚することができない(例えば、画面上に見る)ことはできない。画面は60Hz(またはの画面では、高価なの画面では144Hz)でリフレッシュされるので、そのような小さな遅延は表示されません。あなたは、Linuxのプログラミングに慣れていない場合

、上記のハイパーリンクされた材料の加えAdvanced Linux Programmingを読むのに時間がかかるワーカースレッドで

+0

私はexempleしてください、これで例ヘルムロイス! – BkarimCe

+0

例を作る時間がありません。リンクした資料を読み、自分で試してみるまでに数時間かかります。 –

+0

私に担保を与えてください – BkarimCe

関連する問題