我正在使用 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 个(左右)不同的缓冲区并在每分钟后一次打印出来。有人可以启发我并帮助我理解为什么会发生这种情况,因为我很确定回调每分钟只调用一次。谢谢!