2016-01-20 6 views
0

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

Итак, моя программа - это простая консоль (без GUI) Qt-приложения (linux).

Темы, которые я создал:

  • Он имеет основной() (который выполняет QtCoreApplication) - так что основной поток.
  • Нить для обработки полученных данных из СОМ порта (с использованием FTDI D2XX драйверов ThirdParty кода)

И это все. Когда я делаю ps -T ... и найду свое приложение, есть 7 потоков. У меня есть два класса, которые QObjects используют сигналы и слоты, поэтому, возможно, им нужен поток для обработки сообщений, который приводит меня к 4 потокам ... поэтому я не понимаю, почему у меня может быть 7 потоков для моего приложения.

Может ли кто-нибудь объяснить больше о том, что происходит? при необходимости может отправлять код. Примечание. Я использую только new QThread в своем коде (на данный момент).

+1

Я не могу себе представить, почему Qt создавал бы дополнительные потоки без запроса, особенно без GUI, но, возможно, он не преступник. Попробуйте отключить создание потока, возможно, драйвер FTDI создал другой. –

+1

Также сигналы AFAIK + слоты для обычных событий, таких как нажатия кнопок, не потребуют дополнительных потоков. Они обрабатываются в цикле событий. –

+0

Приложения Qt порождают целые потоки Lotta, особенно приложения GUI. –

ответ

4

Qt не создает ни одного сквозного потока. Он создает вспомогательные потоки по некоторым причинам, специфичным для формы, например. QProcess иногда нужны вспомогательные потоки.

Драйвер UNIX FTDI D2XX использует libusb, и эта реализация полностью обратная и использует дополнительные потоки поверх потока, который вы предоставили для него. Честно говоря, вы не должны использовать драйвер D2XX в Linux или OS X. Просто используйте драйвер ядра.

Вы должны просто запустить драйвер D2XX в тривиальном тестовом приложении, отличном от Qt, которое открывает устройство и непрерывно читает его и показывает, сколько потоков оно возникает. Вы будете встревожены ...

+0

omg, вы правы! - D2XX добавляет три потока сам по себе! Я действительно не ожидал, что еще я бы выделил это и в тесте. Спасибо :) –

+0

@code_fodder Хуже того: каждый бит данных, отправляемых на устройство или возвращающихся из него, передается через один или два рабочих потока в драйвере userland/libusb. Он заставляет контекстные переключатели и ужасно медленно, если вы часто переносите медленные фрагменты данных. Подход FTDI к этому ужасен, и libusb никому не помогает. Не используйте этот жалкий кусок (* censored *). –

+0

Ну ... это очищает это, спасибо большое :) +1 –

Смежные вопросы