【问题标题】:Does timer need mutex计时器是否需要互斥锁
【发布时间】:2012-10-18 00:15:41
【问题描述】:

我在我的程序中使用定时器:
timer = new Qtimer(); connect(timer, SIGNAL(timeout()), this, SLOT(readData()));timer.start(1000);
还有其他插槽可能由 UI 交互触发:
/*SLOT FUNCTION*/ on_pushbutton_triggered(){..../*write data*/...}

(代码是用qt写的,不过我觉得是个常见问题)

所以我担心潜在的问题:可能 readData() 读取错误数据而 on_pushbutton_triggereed() 正在写入数据?

我不太熟悉计时器在屏幕后面的真正工作方式:它与我的程序在同一个线程中吗?
readData() 和 on_pushbutton_triggereed() 是否会被调用、执行、完成并连续没有互斥问题(即:我必须使用lock()和unlock())?感谢您的阅读!我真的希望你的提示!

【问题讨论】:

    标签: multithreading timer mutex


    【解决方案1】:

    Qt 使用event loop 来实现一般的并发活动,特别是在单个线程中实现 QTimer。 事件提供者(在本例中为 QTimer)正在生成事件并将它们发布到事件循环。然后根据它们的优先级和发布顺序对其进行处理。这种方法不需要任何同步,因为当时只执行了一段代码,因此访问数据是安全的。

    在类 Unix 系统上,ps -eLf 命令将显示有关所有进程(输出中的 PID 列)及其线程(LWP 列)的信息。 NLWP 列显示特定进程有多少线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-12
      • 2011-12-01
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多