为什么不能从主线程以外的线程更改CNiButton?

时间:2019-02-12 21:11:05

标签: multithreading visual-c++ mfc labview led

我有2个应用程序,实际上其中两个是相同的应用程序,但是它们在两台不同的计算机上工作,并且第一台计算机(让我们说A)控制第二台计算机(让我们说B)以远程控制连接到计算机的硬件。 B. B也可以单独控制所有硬件。

问题在于,如果A告诉B开启,则无法打开软件中的CNiButton按钮,但是当唯一的B运行时,它可以触发/开启CNiButton。因此,我认为这不是图书馆问题。因为它仅在B尝试打开时才正常工作,但是A告诉B打开,所以它不工作/打开。另外,B中的软件异常终止。

我无法共享代码,因为无法访问代码。无论如何,我真的需要根据您的不同意见

  1. 计算机可以在其上运行的自己的软件上打开CNiButton,
  2. B计算机可以在其上运行的自己的软件上打开CNiButton,

A和B的计算机一起使用,因此B总是侦听A的计算机,如果有来自A的数据包,则B根据数据包执行操作

  1. 如果A发送包括打开CNiButton的数据包并终止程序,则B无法打开CNiButton。

这可能是什么原因? 是什么导致程序终止?

我还提供了一些有关我的系统的信息  -有很多线程可以监听硬件  -B包括监听线程A  -如果A通过通信RS432按下button1,则B呼叫button1发生事件

我认为线程彼此重叠,但是我不明白为什么CNiButton会发生这种情况,而其他标准按钮却不会发生这种情况。

还有什么理由可以使该按钮不应该从除主线程之外的其他线程运行?

同时,该程序适用于VisualC ++ 6.0,并具有适用于NI硬件的驱动程序。

Edit1

我认为需要添加一些我记得的代码!

有一个按钮

CNiButton ledTemperature;

如果您知道LabView,则此按钮看起来像是LabView带领的。还有一个线程监听B计算机,说void listenBComputer()方法和MFC CMSComm类的方法,

 CMSComm comPort;
 void MyClass:: listenBComputer();

listenBComputer()方法调用B comuter,如果B单击例如:fireOpenButton,则A做同样的事情,并假装调用fireOpenButton的方法,就像A计算机单击fireOpenButton,并且必须像打开“ ledTemperature” CNiButton一样,

ledTemperature.SetValue(true) ;

当B计算机向A发送命令但该代码和过程相同,或者如果A在没有B计算机的情况下单击fireOpenButton时,我们说的是相同的代码和过程,则此操作将不会引发异常。

0 个答案:

没有答案