Я работаю над плагином для небольшого приложения, использующего 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 вызывается не чаще, чем раз в минуту.
То, что я нашел, озадачило меня. По истечении каждой минуты я получаю количество, скажем, 10 (как минимум) сообщений, напечатанных на stdout, но эта переменная увеличивается только раз в минуту.
****** snip ****
Проверка на новый день каждую минуту или около того
Перед увеличением
прошло 1 минута
Проверка на новый день каждую минуту или около того
Перед увеличением
прошло 1 минута
**** snip ****
Проверка на новый день каждую минуту или около того
Перед увеличением
2 минуты прошло
Проверка на новый день каждую минуту или около того
Перед увеличением
2 минуты прошло
**** snip ******
Он ведет себя так, как будто текст был отправлен в 10 (или около того) разных буферов и распечатан сразу после каждой минуты. Может ли кто-нибудь просветить меня и помочь мне понять, почему это происходит, потому что я почти уверен, что обратный вызов вызывается только раз в минуту. Спасибо!