Проблемы с многопоточностью, когда приложение Qt использует библиотеки, которые используют многопоточность - PullRequest
0 голосов
/ 24 сентября 2019

Я использую Qt 5.12.3 (Clang 10.0 (Apple), 64-разрядная версия) на MacOS 10.14.6 для создания приложения на MacBook Pro 15 середина 2018 г. 2.2 ГГц i7.

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

Если я вызываю processFrame и передаю ему видеокадры без Qt, он работает идеально каждый раз, то есть когдакод выглядит следующим образом:

int main(int argc, char *argv[])
{

    //QApplication a(argc, argv);
    //MainWindow w;

    while(frame) {
        frame = getVideoFrame("video.mp4");
        processFrame(frame);
    }


    //w.show();
    //return a.exec();
}

Однако, если я раскомментирую элементы Qt, но не запускаю сам процесс окна Qt, то есть:

int main(int argc, char *argv[])
{

    QApplication a(argc, argv);
    MainWindow w;

    while(frame) {
        frame = getVideoFrame("video.mp4");
        processFrame(frame);
    }


    //w.show();
    //return a.exec();
}

У меня возникают проблемы сусловия гонки и управление потоками.Эти проблемы становятся особенно серьезными, когда я запускаю интенсивные, не связанные между собой фоновые процессы на моей машине.

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

Опять же, я должен подчеркнуть, что я не могу получить эти условия гонки вообще , при условии, что я запускаю processFrame без Qt.

Есть ли способ предотвратить управление Qtобработка ресурсов во внешних библиотеках (если в этом проблема)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...