Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: FreTFuL от Август 20, 2010, 11:30



Название: QThread и вечний цикл
Отправлено: FreTFuL от Август 20, 2010, 11:30
У меня создаєтся поток. в нем цикл виполняється пока открити среда.  И так вопрос:

Какую команду мне в нем визвать чтоби обрабатовались собития?


моя функція с циклом запустаєтся из среди воттак:
Код:
void MailSender::run(){
    settings->readSettings();
    QTimer::singleShot(1,this,SLOT(executeSenderLoop()));
    exec();

}

что мне нужно добавить между инструкциями цикла для того чтоби работали сигнали и слоти.


Название: Re: QThread и вечний цикл
Отправлено: BRE от Август 20, 2010, 11:41
А что они разве не работают?
Ты напиши что должно получиться.


Название: Re: QThread и вечний цикл
Отправлено: FreTFuL от Август 20, 2010, 12:50
когда работаєт тот цикл то сигнали и собития не обрабативаються !!! потом чтоу сам цикс в том слоте что визван первим и пока он исполняється то другиє сигнали не принимаються как я понимаю!


Название: Re: QThread и вечний цикл
Отправлено: BRE от Август 20, 2010, 12:55
когда работаєт тот цикл то сигнали и собития не обрабативаються !!! потом чтоу сам цикс в том слоте что визван первим и пока он исполняється то другиє сигнали не принимаються как я понимаю!
Ты какой цикл имеешь ввиду?
Цикл обработки событий, запускаемый в exec() или у тебя есть свой цикл в executeSenderLoop.
Если ты крутишь цикл в executeSenderLoop, то его можно заменить, например, запустив в потоке таймер, который будет постоянно через заданный интервал времени вызывать твой слот, в котором ты будешь проверять наличие почты.


Название: Re: QThread и вечний цикл
Отправлено: FreTFuL от Август 20, 2010, 12:59
У меня свой цикл.  В каком исполняються нужниє мне инструкции но мне нужно чтоби во время етого цикла обрабатовались сигнали тоже!!!


Название: Re: QThread и вечний цикл
Отправлено: BRE от Август 20, 2010, 13:03
У меня свой цикл.  В каком исполняються нужниє мне инструкции но мне нужно чтоби во время етого цикла обрабатовались сигнали тоже!!!
Короче, что бы работали межпоточные сигналы, нужно что бы работал цикл обработки событий.
Как ты его будешь крутить, с помощью exec(), QEventLoop или вызывая QApplication::processEvents() решать тебе!!!

Кстати, что бы только отправить сигнал другому потоку eventloop не обязателен, а вот что бы поток мог принять сигнал - обязателен.


Название: Re: QThread и вечний цикл
Отправлено: FreTFuL от Август 20, 2010, 13:06
QApplication::processEvents()  - можно использовать без exec()?????


Название: Re: QThread и вечний цикл
Отправлено: BRE от Август 20, 2010, 13:09
QApplication::processEvents()  - можно использовать без exec()?????
В потоках нет, это я вообще про event loop.


Название: Re: QThread и вечний цикл
Отправлено: labview от Август 20, 2010, 13:10
Вот в этой простой проге я использовал QThread с сигналами и слотами. Если интересно загляни. Прога на самом деле совсем простая, думаю разберёшься.

http://www.prog.org.ru/index.php?topic=14556.msg95023#msg95023