Смешивание потоков Qt с потоками COM - PullRequest
3 голосов
/ 06 сентября 2010

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

Я также использую Qt в своем проекте,и я хочу использовать Qt для синхронизации и безопасности потоков.Мне интересно, как я могу использовать Qt Threads в этом случае.

Я понимаю, что я также могу использовать функции CriticalSection в Win32, но это усложнит перенос моего кода на другие платформы (так как DShow - этотолько для Windows-кода в моем проекте).

Мой вопрос: «Как мне использовать функции безопасности потоков Qt при работе с потоками не-Qt?»

1 Ответ

3 голосов
/ 06 сентября 2010

(Отказ от ответственности: я сам не использовал потоки QT. - Но я провел перекрестную проверку источников на моем QtCreator здесь.)

Из просмотра http://doc.qt.nokia.com/4.6/threads.html#the-threading-classes и из моего опыта с другими библиотеками потоковЯ бы сказал, что вы, вероятно, можете безопасно использовать все конструкции потоков (QMutex, QMutexLocker, ... но также QFuture, ...), которые не зависят от существования объекта QThread для потока, с которым они «работают».То есть смело используйте один из ваших потоков COM.

О том, как: класс QMutex будет использоваться точно так же, независимо от того, запустили ли вы поток через QThread или это поток COM.Это потому, что он должен был бы напрямую использовать поддержку потоков в основной ОС и не нуждаться в потоке, созданном с помощью объекта QThread.

Поскольку вы упоминаете критические разделы: Qt "only", кажется, реализует универсальный класс QMutex,Что касается функциональности, я думаю, это в значительной степени хорошо.В многопоточных приложениях оно может ( может !) Напрямую использовать win32 CriticalSections (через тонкую оболочку с интерфейсом, похожим на QMutex) из соображений производительности.

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