Я использую 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обработка ресурсов во внешних библиотеках (если в этом проблема)?