問題タブ [qtimer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - マルチスレッドアプリケーションでの QTimer
さて、QTimerで完全に負けました。問題は、マルチスレッド アプリケーションがあり、QTimer のタイムアウトについて何らかの作業を行う必要があることです。私はこのようにしました:
そして、これはうまくいきませんでした。work() がまったく呼び出されないこともあれば、プログラムを閉じたときに呼び出されることもあり、すべてが正常に見えることもありました。
だから、タイマーにはスレッドが必要だと思いました。MCV の例を提供するには:
そして、この例は何もしません。挨拶しないので、タイムアウトは呼び出されず、終了しないので、スレッドは停止しません。質問は次のとおり
です。 1. このコードの何が問題なのですか?
2. マルチスレッド環境で QTimer を適切に使用するにはどうすればよいですか?
c++ - 別のスレッドから Qt タイマーを停止できない
ハイ、
私は最初の Qt プログラムを書いていますが、次のような問題が発生しています。
QObject::killTimer: タイマーは別のスレッドから停止できません
QObject::startTimer: タイマーは別のスレッドから開始できません
私のプログラムは、Canfestival Stackを使用しているため、CANOpen バスと通信します。Canfestival はコールバック メソッドで動作します。通信のタイムアウトを検出するために、タイマー機能を設定します(どういうわけかウォッチドッグのようなものです)。私のタイマー パッケージは、「tmr」モジュール、「TimerForFWUpgrade」モジュール、および「SingleTimer」モジュールで構成されています。「tmr」モジュールはもともと C でプログラムされていたので、静的な「TimerForFWUpgrade」メソッドがインターフェースします。「tmr」モジュールは、C プログラムのファームウェア更新パッケージの一部になります。
タイマーは次のように動作します。メッセージが送信される前に、TMR_Set メソッドを呼び出します。次に、TMR_IsElapsed を使用したアイドル プログラム ループで、タイマーのアンダーフローをチェックします。TMR_IsElapsed の場合、エラー処理を行います。ご覧のとおり、TMR_Set メソッドが継続的に呼び出され、QTimer が何度も再起動されます。
プログラムを起動すると、上記のエラーが表示されます。私のコンセプトがうまくいくかどうか教えてもらえますか? このエラーが表示されるのはなぜですか? メインスレッドに追加のスレッド (QThread) を使用する必要がありますか?
ありがとうございました
マット
実行とアイドル ループ:
モジュール tmr (C プログラムへのインターフェース):
モジュール TimerForFWUpgrade:
モジュール シングルタイマー:
qt5 - Qt5でQTableViewの再描画をトリガーするにはどうすればよいですか?
QAbstractTableModel
シンプルを実装しQTableView
、Qt5 にアタッチしました。タイマーから再描画をトリガーするにはどうすればよいですか? データは毎秒変化しますか?
私の素朴な試みはうまくいきません(再描画は行われません):
c++ - Qt GUI - 値が変更されたときだけ .txt ファイルから読み込みたい
毎秒 .txt ファイルから読み取り、別のクラスの新しいオブジェクトを作成する関数を通知する QTimer オブジェクトを実装しました。私の問題は、関数を 1 つのオブジェクトのみを作成するように制限し、変更がないか .txt ファイルをチェックし続けることです。これはどのように行うことができますか?
以下は毎秒実行されるコードです
multithreading - Parallel ではなく main で順次実行される QTimer
さまざまな学生コードのテスト シミュレーターをセットアップしています。学生コードの実行中に断続的にロボットの動作コードをシミュレートする必要があります。そのため、学生のコードで何が起こっているかに関係なく、おそらく 50 ミリ秒ごとにセンサー関数と移動関数 (後で最適化する時間) が実行されます。適切なスレッドなどを作成するコードをたくさん書きましたが、1 つのコードが常に他のコードを待機することになります。次に、基本的な部分まで単純化しましたが、どのような設定を使用しても、コードは順次実行され続けます。私のコードと出力は、私が入れることができる最も簡単な方法で以下にあります.
タイマー クラス:
メインクラス:
このコードで、代わりに「slept」というメッセージの断続的なインスタンスを含む「Timer Executed」を大量に出力したいと思います。
qt - タイマーを手動で再起動した後の文書化されていない奇妙な QTimer/QEventLoop の動作
内部QEventLoopで関数を呼び出すQTimerを使用しているときに、最近これに遭遇しました
QTimer インスタンスがあるとします。
コンストラクターのどこかでそれを開始すると、100msごとに1回刻み始めます
楽しい部分です。内部 QEventLoop を持つスロットに接続します。
このループがいかに馬鹿げているかはさておき、スロットの処理を終了することはなく、タイマーの後続のタイムアウトが実行キューにスタックし続けることがわかります。すべてが順調で、あるべき姿です。
本来あるべきでないことは次のとおりです。QEventLoop は、スロットが無意識にアイドル状態になっている間もアプリの応答性を維持するため、次のようなボタンとその clicked() スロットを作成できます。
ここで行っていることは、基本的に現在のタイマー サイクルを再起動することであり、それ以下でもそれ以上でもありません。右?いいえ!この再起動後、SlotFunction は再び起動し、タイマーの再起動後のティックが実際にはそれ以前に発行された他のすべてのティックと等しくないことを示唆しています...
私の唯一の質問は: WTF ?! タイマーを手動で再起動すると、スロットの追加時間を入力できるようになるのはなぜですか? freenodeで聞いてみたのですが、「あるべき姿です」という返事しか返ってきませんでした。
python - エラー「QObject::startTimer: QTimer は、QThread で開始されたスレッドでのみ使用できます」というエラーが何度も発生します。
これは以前に何度も尋ねられたことを知っています。私はそれらのスレッドをすべて読みましたが、私の場合は違うようです。この問題を抱えている他のすべての人には、私が除外したと思われるいくつかの単純な原因があります。
- イベント ループが実行されていない状態でタイマーを開始する
- タイマーを作成したスレッド以外のスレッドからのタイマーの開始/停止
- ウィジェットの親プロパティの設定に失敗し、破棄の順序に問題が発生する
以下に、問題を示す最小限のコード サンプルを示します。スレッドもタイマーも開始していないことに注意してください。また、すべてのウィジェットの親を設定しました。グラフ ウィジェットを削除すると問題が解決するので、pyQtGraph のせいにしたくなりますが、プロット ウィジェットを含めてすべての空白のタブ (つまり、tabCatchaTiger を除くすべてのタブ) を除外すると、問題も解決します。 pyQtGraph を正当化するようです。
バージョン:
- ウィンドウズ7
- パイソン 2.7.8
- ウイング IDE 5.0.9-1
- PyQt 4.11.1
- PyQwt 5.2.1
- PyQtGraph 0.9.8
テストケース:
c++ - PixMap を使用して動画を表示する Qt C++ ヘルプ
私は c++ で Qt を使用して、画面上で物を動かすことを伴うプラント z ゾンビをコーディングしています。そのために、advance() 関数に接続した QTimer を使用しています。
オブジェクトを移動させることはできますが (qDebug を使用して座標を確認します)、画面を更新するか、ウィンドウを切り替えない限り (たとえば、Alt タブを 2 回押すか、Windows キー ボタンをクリックします)、画像が物理的に変化することはありません。
これは私のクラスの一例です。ここでは、エンドウ豆を画面上で動かそうとしています。
対応する cpp ファイルとともに
python - QTimer と QThread の奇妙な動作
出力:
alarm_goes1 が実行されない理由を説明してください。そして、どうすればそれを実現できますか?
編集:
両方のタイマーを使用self.exec_()
すると正常に動作しますが、while ループ内の部分は動作しません。がなければ、self.exec_()
タイマーの 1 つだけが機能しますが、while ループは機能します。
タイマーと while ループの両方を連携させたい。
self.exec_()
while ループ内を移動してみましたが、一度しか実行されません。