Qtで書かれたGUIプログラムを実行しているRaspberry Pi 3があります。私はwiringPi libraryを使用して、特定のGPIOピンがLowになったときに発生する割り込みを設定しています。これが起こると、Piが10秒後にシャットダウンするというダイアログウィンドウが表示され、シャットダウンをキャンセルするオプションが表示されます。割り込み処理中にメインのGUIスレッドに戻るには?
割り込みを受け取る関数が新しいスレッドで起動され、Qtでタイマーなどがメインスレッドの外部で使用されないという問題があります。私はどのように私は割り込み関数からメインスレッドに通信することができます知っていると思います。この関数は引数btwを受け付けません。
例コード:
MainWindow::MainWindow() {
wiringPiSetup();
//Set up an interrupt to detect when WiringPI pin 0 (header #11) goes low
//Call the ShutdownISR function when this happens.
wiringPiISR(0, INT_EDGE_FALLING, &ShutdownISR);
}
//Non-member, free function. Handles interrupt.
void ShutdownISR() {
//Crashes the program with errors about doing GUI stuff outside the main thread
ShutdownDialog* sdDlg = new ShutdownDialog();
sdDlg->exec();
}
Qtドキュメントの例は完全に機能しました。ありがとうございました。 – Carlton