[M1 Mac, Monterey 12.6.3, clang 13.0.0, FLTK 1.3.8, ChatGPT Plus, NO IDE]
FLTKのコールバック関数とストップウォッチ表示のマルチスレッド処理について試した内容をまとめておきます。
・Fl::add_timeout関数
指定された時間間隔でコールバック関数を呼び出します。ストップウォッチだけなら動作するが、送受信が加わるとウォッチの数値は動かず、送受信終了時に表示される。
int main(int argc, char **argv) {
<中略>
window->end();
window->show(argc, argv);
Fl::add_timeout(0.01, timerCallback);
return Fl::run();
}
void timerCallback(void*) {
// 経過時間を取得して、Fl_Outputに表示する
double elapsedTime = stopwatch.elapsedTime();
stringstream ss;
// ss << std::fixed << elapsedTime;
ss << std::fixed << std::setprecision(1) << elapsedTime;
// cout << "経過時間: " << ss.str() << endl;
timeShow->value(ss.str().c_str());
window -> redraw();
// タイマーを再起動する
Fl::repeat_timeout(0.01, timerCallback);
}
void sendCB2(Fl_Widget*, void*) {
// ストップウォッチ開始
resetBtn -> do_callback();
startBtn -> do_callback();
}