Почему CNiButton нельзя изменить из потока, кроме основного потока? - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть 2 приложения, фактически два из них - это одно и то же приложение, но они работают на двух разных компьютерах, и первый компьютер (скажем, A) управляет вторым компьютером (скажем, B) удаленно для управления оборудованием, подключенным кB. B также может контролировать все оборудование в одиночку.

Проблема в том, что кнопка CNiButton в программном обеспечении не может быть включена, если A говорит B о включении, но когда работает только B, он может запускать / включать CNiButton.Поэтому я предполагаю, что это не проблема библиотеки.Поскольку он работает нормально только тогда, когда B пытается включить, однако, A говорит B включить, он не работает / не включается.Кроме того, программное обеспечение в B завершается ненормально.

Я не могу поделиться кодом, потому что код недоступен.В любом случае мне очень нужны ваши разные мнения в соответствии с

  1. . Компьютер A может включать CNiButton на собственном программном обеспечении, которое на нем работает,
  2. Компьютер B может включать CNiButton на собственном программном обеспечении, котороезапустите на нем

компьютер A и B вместе, чтобы B всегда слушал компьютер A, если есть пакет от A, B выполняет действия в соответствии с пакетом

B не может включить CNiButton, если A отправляет пакет, включая включение CNiButton и завершение программы.

В чем может быть причина этого?Что может привести к завершению программы?

Я также даю некоторую информацию о моих системах - Есть много потоков для прослушивания аппаратного обеспечения - B, включая поток для прослушивания A - B вызывает button1 события, если A нажимает на button1 посредством связи RS432

Я думаю, что потоки перекрывают друг друга, но я не понимаю, почему это происходит для 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 thenСделайте то же самое и вызовите метод fireOpenButton, делая вид, как «Компьютер» щелкает на fireOpenButton и должен включать «ledTempera» CNiButton, как,

ledTemperature.SetValue(true) ;

Эта операция не работает и выдает исключение, когда компьютер Bотправьте команду A, но тот же код и процесс или все, что мы говорим, работает, если A нажимает fireOpenButton без компьютера B.

...