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