0

我有一个 TThread 接收和发送到 COM 端口上的设备。读取数据后,我想使用 Synchronize(function name) 激活 GUI(不在同一个线程中)。但是,当我调用 GUI 的表单函数来执行按钮单击时,我遇到了访问冲突。我检查了表单的值是否为 null 而不是,因为这将是访问冲突的明显原因。现在,我正在设置全局标志并使用一个计时器来不断检查是否满足某个条件,如果满足,那么我会触发该表单中的按钮单击事件。这似乎是避免访问冲突的唯一方法。

我真的不喜欢计时器,所以有没有办法避免在表单上使用计时器?

4

2 回答 2

0

您可以将消息发布到相关窗口。计时器以类似的方式工作。它只是在表单内触发一条 Windows 消息。你显然有一个窗口的句柄。

CWnd::PostMessage(...)不要使用发送消息,它会被内联处理并可能导致您的线程停止工作。

通常,当您有一个尝试访问 Guithread 的工作线程时,它们会发生冲突。自从我使用 MFC 和线程以来已经有一段时间了,但这就是我记得的。我相信它已被记录以这种方式工作。

于 2009-12-07T22:02:15.963 回答
0

我发现了问题。我以为我在检查我的表单是否为空,但我不是。我修复了它,确保我引用的表单不​​是null.

编辑:原来当我调用 Fbutton1Click() 时调用的一种形式是 Modal 所以它阻塞了我的线程。我最终不得不回到计时器来调用按钮点击......哦,好吧。

于 2009-12-08T20:42:20.280 回答