LINUX.ORG.RU

QThread блокирует форму!!!


0

0

Имеется такой код:

/*************** processor.h ********************/
#ifndef PROCESSOR_H
#define PROCESSOR_H

#include <qhtread.h>

class TestProcThread : public QThread
{
public:

TestProcThread();
~TestProcThread();

void run(void);
};

#endif
/******************** ************************/

/*************** processor.cpp **********************/
#include <tabs/Testing/processor.h>

TestProcThread::TestProcThread()
{

}

TestProcThread::~TestProcThread()
{

}

void TestProcThread::run(void)
{
sleep(2);
}
/********************************************/

/********************************************/
#icnlude <processor.h>

TestProcThread *processor_test;

void Main_Window::fillTestProcessorPage()
{
processor_test = new TestProcThread;
}

void Main_Window::beginTestProcessor()
{
processor_test->start();
processor_test->wait();
}
/*********************************************/

Тред запускается функцийей beginTestProcessor(), эта функция привязана к кнопке на окне.
В run() я прописал sleep(2) что бы понять что тред работает, это не опечатка :))
Так вот после нажатия этой кнопки форма блокируется вплоть до завершения треда. Но ведь смысл как раз в
том что бы этот тред работал независимо и не блокировал приложение или я неправ. Может ктонибудь
пояснит где я ошибся. Т.е. моя задача что бы полсе нажатия на кнопку процесс работал нзависимо и не блокировал приложеие.

Заранее спасибо!!!

★★★★★

Внимательней читай документацию!

bool QThread::wait ( unsigned long time = ULONG_MAX )

A thread calling this function will block until either of these conditions is met:

The thread associated with this QThread object has finished execution (i.e. when it returns from run()). This function will return TRUE if the thread has finished. It also returns TRUE if the thread has not been started yet.

time milliseconds has elapsed. If time is ULONG_MAX (the default), then the wait will never timeout (the thread must return from run()). This function will return FALSE if the wait timed out.

Delay ★★
()
Ответ на: комментарий от cyclon

В общем виде это звучит так:

Функция wait ждет завершения трэда время time, по дефолту равное ULONG_MAX, если в течении этого времени трэд завершился то функция возвращает true, если нет то false.

А теперь внимание во время работы wait ьлокирует выполнение твоей программы.

Т.е. тебе она вообще не нужна, запускай тред start(), а потом при необходимости проверь завершился ли он bool finished().

Delay ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.