Потоки, QRunnable и QThreadPool, я не могу вписаться в детали - PullRequest
5 голосов
/ 15 марта 2011

Я знаю общую теорию, Thread, QRunnable и QThreadPool. Как все это вписывается? Я имею в виду, когда экземпляр QRunnable создается и присваивается ThreadPool, что означает запуск потока? Могут ли несколько потоков обращаться к одному QRunnable? Обязательно ли один QRunnable сопоставляет один-к-одному с одним рабочим потоком?

1 Ответ

12 голосов
/ 15 марта 2011

QRunnable инкапсулирует задачу, которую вы хотите выполнить в отдельном потоке. Если вам нужно знать, какой поток выполняет эту задачу или разделить ее между потоками, то вы, вероятно, делаете что-то более сложное, чем то, что QThreadPool предназначен для расширения возможностей. В этом случае вы можете создать собственное поведение, используя QThread напрямую. «Запуск» QRunnable с помощью QThreadPool аналогичен постановке этой задачи в очередь для доступного потока в пуле. Принимая во внимание, что запуск QThread фактически выделяет новый поток ОС и выполняет его.

Пул потоков будет управлять конечным числом потоков с рабочей очередью экземпляров QRunnable. Когда поток станет доступным, ему будет присвоен QRunnable для обработки. Вам не нужно явно создавать экземпляры QThread, если вы используете QThreadPool с QRunnable. Обратите внимание, что вы все равно должны обеспечить синхронизацию общих ресурсов (например, с QMutex, QMutexLocker, QReadWriteLock, QSemaphore и / или QWaitCondition) при использовании в экземплярах QRunnable.

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