multithreading - 为什么 CNiButton 不能从除主线程之外的线程更改?
问题描述
我有 2 个应用程序,实际上其中两个是同一个应用程序,但它们在两台不同的计算机上工作,第一台计算机(假设 A)远程控制第二台计算机(假设 B)以控制连接到 B 的硬件。 B也可以单独控制所有硬件。
问题是软件中的CNiButton按钮如果A对B说打开就无法打开,但是当只有B在运行时,它可以触发/打开CNiButton。所以我认为这不是图书馆问题。因为它只有在B尝试打开时才能正常工作,但是,A告诉B打开,它不工作/打开。另外,B中的软件异常终止。
我无法共享代码,因为代码不可访问。无论如何我真的需要你的不同意见
- A电脑可以在其上运行的自己的软件上打开CNiButton,
- B电脑可以在自己运行的软件上打开CNiButton,
A和B电脑在一起,所以B一直听A电脑如果有来自A的数据包,B根据数据包做动作
- 如果 A 发送一个包含打开 CNiButton 和程序终止的数据包,则 B 无法打开 CNiButton。
这些可能是什么原因?什么会导致程序终止?
我还提供了一些关于我的系统的信息 - 有很多线程可以监听硬件 - B 包括监听 A 的线程 - 如果 A 通过 RS432 通信按下按钮 1,则 B 调用按钮 1 事件
我认为线程相互重叠,但我不明白为什么 CNiButton 会发生这种情况,而其他标准按钮不会发生这种情况。
除了主线程之外,还有什么理由不应该从另一个线程运行此按钮吗?
同时,该程序适用于 VisualC++ 6.0,并具有适用于 NI 硬件的驱动程序。
编辑1
我认为需要添加一些我记得的代码!
有一个按钮
CNiButton ledTemperature;
如果你知道 LabView,这个按钮看起来像一个 LabView led。一个线程监听 B 计算机让我们说 void listenBComputer() 方法和 MFC CMSComm 类的方法,
CMSComm comPort;
void MyClass:: listenBComputer();
listenBComputer() 方法调用 B 计算机,如果 B 点击例如:fireOpenButton 然后 A 做同样的事情并调用 fireOpenButton 的方法,假装像一台计算机点击 fireOpenButton 并且必须打开“ledTemperature”CNiButton 一样,
ledTemperature.SetValue(true) ;
当 B 计算机向 A 发送命令时,此操作不起作用并抛出异常,但相同的代码和过程或我们所说的任何内容如果 A 在没有 B 计算机的情况下单击 fireOpenButton 则正常工作。
解决方案
推荐阅读
- python - python使用urllib2和urllib获取请求问题
- c++ - 我创建了一个库,想知道设计是否效率低下
- javascript - 如何在按钮点击反应中添加延迟?
- python - 如何在python中根据索引绘制图形
- javascript - Node.js Telegram 机器人无法从超级组中踢出用户
- sql - 当字符串长度为动态时替换字符串文本的特定部分
- vb.net - 如何处理“ManagementException 未被用户代码处理”C#/Vb.net 中的访问被拒绝
- scala - ZIO Schedule 简单示例
- reactjs - 将复杂的字符串传递给 React 对象
- python - Python将字符串与int列表连接起来