私はgtkmmを使った小さなアプリケーション用のプラグインに取り組んでいます。私が取り組んでいるプラグインは、毎分後に特定の条件(日付が変更され、新しい日が開始された)をチェックし、条件が真の場合にいくつかのアクションを開始します。プラグインの初期化部分には、Glib::SignalTimeoutとsigc++を使用する次のコードがあります。
testCounter = 0;
sigc::slot<bool> tslot = sigc::mem_fun(*this,
&NoteOfDayFactory::checkNewDay);
timeoutObj = Glib::signal_timeout()
.connect(tslot,CHECK_INTERVAL);
ここで、testCounterは初期化メソッドを含むクラスで定義された属性であり、CHECK_INTERVALは1分に等しい定数です。存在する他のすべての変数は、初期化コードとコールバックメソッドを含むクラスで定義されています。checkNewDayメソッドは、条件がテストされ、日が変更された場合にアクションが実行される場所です。
bool NoteOfDayFactory::checkNewDay() {
std::cout << "Checking for new day every minute or so" << std::endl;
std::cout << "Before incrementing" << std::endl;
for(int i = 0; i < 100000; i++);
counter++;
std::cout << counter << " minutes elapsed" << std::endl;
return true; }
実際のアクションを使用する前に、上記の小さなテストコードを配置して、すべてがうまくいき、checkNewDayが1分に1回しか呼び出されないかどうかをテストしました。私が見つけたものは私を困惑させます。1分ごとに、stdoutに(少なくとも)10個のメッセージが出力されますが、変数は1分ごとに1回だけ増加します。
****** をちょきちょきと切る ****
毎分かそこらで新しい日をチェックしています
インクリメントする前
1分経過
毎分かそこらで新しい日をチェックしています
インクリメントする前
1分経過
**** をちょきちょきと切る ****
毎分かそこらで新しい日をチェックしています
インクリメントする前
2分経過
毎分かそこらで新しい日をチェックしています
インクリメントする前
2分経過
**** をちょきちょきと切る ******
テキストが10個(またはそれ以上)の異なるバッファに送信され、1分ごとに一度に印刷されたように動作します。誰かが私を啓発し、なぜこれが起こっているのかを理解するのを手伝ってくれるでしょうか。コールバックは1分に1回しか呼び出されないと確信しているからです。ありがとうございました!