我正在为使用gtkmm的小型应用程序开发插件。我正在处理的插件会在每分钟后检查某些条件(日期已更改,新的一天开始),并在条件成立时开始一些操作。在插件的初始化部分我已在下面的代码段,它使用油嘴:: SignalTimeout和sigC++:glibmm超时信号
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(或左右)不同的缓冲液和每分钟之后,一次打印出来。有人能够启发我,并帮助我理解为什么会发生这种情况,因为我非常肯定每分钟只会调用一次回调。谢谢!
我转载了类似于您的代码的东西,并且按预期方式工作。我无法访问主循环,因为我正在为其他人创建的应用程序编写插件。 在插件中,它看起来像在超时时多次调用回调。让我困惑的是,变量不是每次只有当它假设时才增加(参见打印输出列表)。这就是为什么我想这个回调函数只被调用一次,但输出结果是重复的。 这就是为什么我问这个问题,因为我不明白是什么造成了这个问题。 我会尝试看看应用程序的源代码。 – crazybyte 2009-07-13 10:15:07