Описание класса QThreadКласс QThread обеспечивает платформонезависимые потоки. Далее... #include <QThread> Унаследован от: QObject. От него наследуются: Открытые типы
Открытые функции
Открытые слоты
Сигналы
Статические открытые члены
Защищенные функции
Статические защищенные члены
Дополнительные унаследованные члены
Подробное описаниеКласс QThread обеспечивает платформонезависимые потоки. QThread представляет собой отдельный поток управления в программе; он делится данными со всеми другими потоками в процессе, но выполняется независимо тем способом, каким отдельная программа выполняется в многозадачной системе. Вместо того чтобы запускаться в функции main(), QThreads начинает выполнение в функции run(). По умолчанию run() запускает цикл событий, вызывая exec() (см. ниже). Для создания собственных потоков унаследуйте QThread и переопределите run(). Например: class MyThread : public QThread { public: void run(); }; void MyThread::run() { QTcpSocket socket; // подключение необходимых сигналов QTcpSocket ... socket.connectToHost(hostName, portNumber); exec(); } В потоке будет создан QTcpSocket, а затем выполнится цикл обработки событий потока. Используйте метод start() для начала выполнения. Выполнение заканчивается, когда вы возвращаетесь из функции run(), аналогично приложению, когда оно покидает функцию main(). QThread будет уведомлять вас сигналами started(), finished() и terminated() о начале, завершении и прерывании потока соответственно, или вы можете использовать функции isFinished() и isRunning(), чтобы запросить состояние потока. Используйте функцию wait() для блокировки до тех пор, пока поток не закончит выполнение. Каждый поток получает свой собственный стек от операционной системы. Операционная система также определяет размер стека по умолчанию. Вы можете использовать setStackSize() для установки нестандартного размера стека. Каждый QThread может иметь свой собственный цикл обработки событий. Вы можете запустить цикл обработки событий вызовом exec(); вы можете остановить его вызовом exit() или quit(). Наличие цикла событий в потоке позволяет соединять сигналы из других потоков со слотами в этом потоке, используя механизм, называемый соединением через очередь. Это также позволяет использовать в потоке классы, которые требуют цикл обработки событий, такие как QTimer и QTcpSocket. Однако следует отметить, что невозможно использовать в потоке любые классы виджетов. В крайних случаях вы можете принудительно прерывать выполнение потока функцией terminate(). Однако это опасно и не рекомендуется. Пожалуйста, прочитайте документацию по функциям terminate() и setTerminationEnabled() для получения дополнительной информации. Статические функции currentThreadId() и currentThread() возвращают идентификатор для текущего выполняющегося потока. Первая возвращает платформозависимый идентификатор потока, последняя - указатель на QThread. QThread также предоставляет платформонезависимые функции сна различных размерностей. Используйте sleep() для полных секунд, msleep() для миллисекунд и usleep() для микросекунд. Смотрите также Поддержка потоков в Qt, QThreadStorage, QMutex, QSemaphore, QWaitCondition, Пример "Mandelbrot", Пример "Semaphores" и Пример "Wait Conditions". Описание типов-членовenum QThread::PriorityЭто перечисление описывает, как операционная система должна планировать выполнение только что созданных потоков.
Описание функций-членовQThread::QThread ( QObject * parent = 0 )Создает новый поток с заданным родителем. Поток не начинает выполнение, пока не будет вызвана функция start(). Смотрите также start(). QThread::~QThread ()Уничтожает поток. Обратите внимание на то, что удаление объекта QThread не будет останавливать выполнение соответствующего потока. Удаление выполняющегося QThread (т.е. isFinished() возвращает false), вероятно, приведет к аварийному завершению программы. Вы можете подождать поток функцией wait(), чтобы убедиться, что он завершился. QThread * QThread::currentThread () [static]Возвращает указатель на поток QThread, который выполняется в данный момент. Qt::HANDLE QThread::currentThreadId () [static]Возвращает дескриптор потока, который выполняется в данный момент. Предупреждение: Дескриптор, возвращаемый этой функцией, используется для внутренних целей и не должен использоваться нигде в коде приложения. Предупреждение: В Windows возвращаемое значение является псевдодескриптором текущего потока. Оно не может быть использовано для числового сравнения. т.е., эта функция возвращает DWORD (Windows-Thread ID), возвращаемый Win32-функцией getCurrentThreadId(), а не HANDLE (Windows-Thread HANDLE), возвращаемый Win32-функцией getCurrentThread(). int QThread::exec () [protected]Входит в цикл обработки событий и ждет вызова exit(), возвращая значение, которое было передано функцией exit(). Возвращается значение 0, если exit() была вызвана через quit(). Эту функцию необходимо вызвать, чтобы начать обработку событий. Смотрите также quit() and exit(). void QThread::exit ( int returnCode = 0 )Сообщает циклу обработки событий потока о необходимости выхода с кодом возврата returnCode. После вызова этой функции поток выходит из цикла обработки событий и возвращается из вызова QEventLoop::exec(). Функция QEventLoop::exec() возвращает returnCode. По соглашению, returnCode возвращает 0 при успехе и любое ненулевое значение, указывающее об ошибке. Обратите внимание, что в отличие от библиотечной функции C с тем же именем, эта функция действительно возвращается в место вызова - она останавливает обработку событий. QEventLoops больше не будет запущен в этом потоке, до тех пор пока снова не будет вызван QThread::exec(). Если цикл обработки событий в QThread::exec() не запущен, то и из следующего вызова QThread::exec() возврат будет произведен сразу. Смотрите также quit() и QEventLoop. void QThread::finished () [signal]Этот сигнал испускается, когда поток завершает выполнение. Смотрите также started() и terminated(). int QThread::idealThreadCount () [static]Возвращает идеальное количество потоков, которое может быть запущено в системе. Она делает запрос количества процессорных ядер, как реальных, так и логических. Эта функция возвращает -1, если количество процессорных ядер не может быть определено. bool QThread::isFinished () constВозвращает true, если поток был завершен; иначе возвращает false. Смотрите также isRunning(). bool QThread::isRunning () constВозвращает true, если поток запущен; иначе возвращает false. Смотрите также isFinished(). void QThread::msleep ( unsigned long msecs ) [static protected]Заставляет текущий поток спать msecs миллисекунд. Смотрите также sleep() и usleep(). Priority QThread::priority () constВозвращает приоритет запущенного потока. Если поток не запущен, функция возвращает InheritPriority. Эта функция была введена в Qt 4.1. Смотрите также Priority, setPriority() и start(). void QThread::quit () [slot]Сообщает циклу обработки событий потока о необходимости выхода с кодом возврата 0 (успешное завершение). Эквивалентно вызову QThread::exit (0). Эта функция ничего не делает, если поток не имеет цикла обработки событий. Смотрите также exit() и QEventLoop. void QThread::run () [virtual protected]Начальная точка для потока. После вызова start() вновь созданный поток вызывает эту функцию. Реализация по умолчанию просто вызывает exec(). Вы можете переопределить эту функцию, чтобы сделать другую полезную работу. Возврат из этого метода закончит выполнение потока. Смотрите также start() и wait(). void QThread::setPriority ( Priority priority )Эта функция устанавливает приоритет priority для работы потока. Если поток не запущен, эта функция ничего не делает и сразу же возвращается. Используйте start() для запуска потока с определенным приоритетом. Аргумент priority может принимать любые значения из перечисления QThread::Priority за исключением InheritPriorty. Эффект от параметра priority зависит от политики планирования операционной системы. В частности, приоритет priority будет проигнорирован в системах, не поддерживающих приоритеты потоков (таких как Linux, смотрите http://linux.die.net/man/2/sched_setscheduler для получения дополнительной информации). Эта функция была введена в Qt 4.1. Смотрите также Priority, priority() и start(). void QThread::setStackSize ( uint stackSize )Устанавливает максимальный размер стека для потока в stackSize. Если stackSize больше нуля, то максимальный размер стека устанавливается размером stackSize байт, иначе максимальный размер стека автоматически определяется операционной системой. Предупреждение: Большинство операционных систем устанавливают ограничения на минимальный и максимальный размер стека потока. Поток не запустится, если размер стека находится вне этих пределов. Смотрите также stackSize(). void QThread::setTerminationEnabled ( bool enabled = true ) [static protected]Включает или отключает возможность прерывания текущего потока, основываясь на параметре enabled. Поток должен быть запущен QThread. Когда enabled равен false, прерывание выключено. Последующие вызовы QThread::terminate() будут завершаться сразу же, без эффекта. Вместо этого завершение откладывается до тех пор, пока прерывание не будет включено. Когда enabled равен true, прерывание включено. Последующие вызовы QThread::terminate() будут прерывать поток в нормальном режиме. Если прерывание было отложено (т.е. QThread::terminate() была вызвана, когда прерывание было отключено), эта функция немедленно прервет вызывающий поток. Обратите внимание на то, что в этом случае функция не вернет управление. Смотрите также terminate(). void QThread::sleep ( unsigned long secs ) [static protected]Заставляет текущий поток заснуть на secs секунд. Смотрите также msleep() и usleep(). uint QThread::stackSize () constВозвращает максимальный размер стека для потока (если он был установлен функцией setStackSize()); в противном случае возвращает ноль. Смотрите также setStackSize(). void QThread::start ( Priority priority = InheritPriority ) [slot]Начинает выполнение потока путем вызова run(), которая должна быть переопределена в подклассе QThread для добавления вашего кода. Операционная система будет планировать поток в соответствии с параметром priority. Если поток уже запущен, то эта функция ничего не делает. Эффект от параметра priority зависит от политики планирования операционной системы. В частности, приоритет priority будет проигнорирован в системах, не поддерживающих приоритеты потоков (таких как Linux, смотрите http://linux.die.net/man/2/sched_setscheduler для получения дополнительной информации). Смотрите также run() и terminate(). void QThread::started () [signal]Этот сигнал испускается, когда поток начинает выполнение. Смотрите также finished() и terminated(). void QThread::terminate () [slot]Прерывает выполнение потока. Поток может быть завершен сразу или нет, в зависимости от политики планирования операционной системы. Используйте QThread::wait() после terminate() для синхронизации прерывания. Когда поток прерывается, все потоки, ожидающие завершения этого потока, будут разбужены. Предупреждение: Эта функция является опасной и ее использование не рекомендуется. Поток может быть прерван в любой точке алгоритма. Потоки могут быть прерваны во время изменения данных. Нет никаких шансов того, что поток произведет очистку за собой, разблокирует любые удерживаемые мьютексы и т.д. Словом, используйте эту функцию только в случае крайней необходимости. Прерывание может быть явно включено или выключено вызовом QThread::setTerminationEnabled(). Вызов этой функции в то время, как прерывание отключено, приведет к тому, что прерывание будет отложено до тех пор, пока оно не будет повторно включено. Для получения дополнительной информации смотрите описание QThread::setTerminationEnabled(). Смотрите также setTerminationEnabled(). void QThread::terminated () [signal]Этот сигнал испускается, когда поток прерывается. Смотрите также started() и finished(). void QThread::usleep ( unsigned long usecs ) [static protected]Заставляет текущий поток уснуть на usecs микросекунд. Смотрите также sleep() и msleep(). bool QThread::wait ( unsigned long time = ULONG_MAX )Блокирует поток до выполнения любого из этих условий:
Это обеспечивает схожую с функцией POSIX pthread_join() функциональность. Смотрите также sleep() и terminate(). void QThread::yieldCurrentThread () [static]Отдает время выполнения текущего потока другому запущенному потоку, если такой имеется. Обратите внимание, что операционная система сама решает, на какой поток переключиться. |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |