0

我在我的程序中使用计时器:
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())吗? 感谢您的阅读!我真的希望你的提示!

4

1 回答 1

1

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

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

于 2012-10-18T10:00:35.383 回答