Закрытие и открытие QSerialPort из другого потока - PullRequest
0 голосов
/ 11 ноября 2018

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

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

В этом примере поток всегда будет держать последовательный порт открытым. Я попытался добавить bool как переменную-член и пару открытых функций, чтобы он остановился и запустился ... но он не работает ...

Я думаю, проблема в том, что когда я вызываю публичную функцию "MasterThread" из моего потока графического интерфейса, переменная не обновляется.

Класс "MasterTrhead" имеет bool "m_quit" ... но у него нет примера, как его использовать ...

Вот изменения, которые я сделал:

Я добавил эти две функции в тело класса:

void MasterThread::stopCommunication()
{
    mFreeThePort = true;
}

void MasterThread::resumeCommunication()
{
    mFreeThePort = false;
}

Затем в переопределенной функции run () у меня есть:

while (!m_quit) {

    if(mFreeThePort) {
        serial.close();
        QThread::msleep(5);
        continue;
    }

Итак, я только добавил, что mFreeThePort логическое значение и две функции, чтобы установить его в true или false ...

Но он никогда не закрывает последовательный порт ... Я думаю, из-за цикла while.

Вы можете найти исходный код исходного примера здесь для HEADER и здесь для BODY

1 Ответ

0 голосов
/ 12 ноября 2018

Доступ к логическим переменным может быть оптимизирован компилятором. Но в любом случае это не совсем подходит для вашего варианта использования.

Поскольку у вас есть два приложения, пытающихся получить доступ к одному и тому же оборудованию одновременно, вы должны иметь своего рода «мультиплексор», к которому вы бы подключили оба приложения, чтобы разделить использование последовательного порта.

Кстати, почему у вас есть несколько приложений, пытающихся получить доступ к одному и тому же последовательному порту одновременно?

...