Методы

boolisRunning ( )

Слоты

voidstart ( )
voidstop ( )

Описание методов

bool QThread::isRunning ( )  

Описание слотов

void QThread::start ( )  

void QThread::stop ( )  

Примеры

// Создаем новый класс-наследник QObject, объект которого должен будет работать в отдельном потоке
// Назовем его MyWorker (Работник)
class MyWorker extends QObject {
  private $button;
  private $counts;
  private $run;
  
  // в конструктор мы должны передать что-то, с чем будет работать наш поток
  // у меня это будет кнопка. 
  //
  // П.с. надеюсь объяснять, что конструктор может иметь абсолютно любую структуру не нужно? =) 
  // не обязательно что-то передавать вообще, не обязательно передавать именно объект, 
  // не обязательно вообще создавать конструктор... 
  // главное - описать функцию этого класса, которая должна будет работать в отдельном потоке
  public function __construct($button) {
    $this->button = $button;
    $this->counts = 0;
  }

  // эта функция будет вызвана в потоке. Выполняет она следующие действия: 
  // 1. устанавливает переменную run в значение TRUE, чтобы войти в цикл
  // 2. цикл увеличивает счетчик итераций 
  // 3. цикл записывает значение счетчика в кнопку
  public function process() {
    $this->run = true;
    
    while ($this->run) {
      $this->counts++;
      $this->button->text = $this->counts;
      usleep(1);
    }
  }
  
  // функция для остановки цикла
  public function stop() {
    $this->run = false;
  }
}

// Создаем QApplication
$app = new QApplication();

// Создаем форму
$widget = new QWidget(); 
$widget->show();

// Создаем на форме кнопку
$button = new QToolButton($widget);
$button->show();

// Создаем поток
$thread = new QThread();

// Создаем объект, который будет работать в потоке
// и передаем ему нашу кнопку
$worker = new MyWorker($button);

// Перемещаем нашего "работника" в поток
$worker->moveToThread($thread);

// Соединяем слоты: когда поток стартует, вызываем функцию process() у "работника"
$thread->connect(SIGNAL('started()'), $worker, SLOT('process()'));

// при нажатии на кнопку я хочу чтобы счетчик остановился
// функция stop у "работника" запишет в переменную $run значение FALSE - это обеспечит выход из цикла
$button->connect(SIGNAL('clicked(bool)'), $worker, SLOT('stop()'));

// Так как поток мне больше не нужен, его нужно закрыть. Для это у QThread есть слот quit()
$button->connect(SIGNAL('clicked(bool)'), $thread, SLOT('quit()'));

// Запускаем поток
$thread->start();

$app->exec();  
comments powered by HyperComments