Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: anDROid от Апреля 03, 2011, 08:38



Название: QEventLoop как работает?
Отправлено: anDROid от Апреля 03, 2011, 08:38
Код:
QEventLoop loop(this);
        connect(ui->pushButton_2,SIGNAL(clicked()),&loop,SLOT(quit()));
        //blabla
    loop.exec();
Я так понял,что QEventLoop выполняет в цикле команды, находящиеся между определением лупа и exec(),до тех пор пока не получит quit().
Данным кодом я хотел заставить выполняться код //blabla пока я не нажму pushButton_2,но луп почему-то выполняется только один раз...
В чем фишка?Где я ступил?


Название: Re: QEventLoop как работает?
Отправлено: GreatSnake от Апреля 03, 2011, 13:44
loop аллокирован на стеке и после loop.exec(); будет уничтожен и при следующем нажатии на кнопку по идее твоя прикладина должна была грохнуться.


Название: Re: QEventLoop как работает?
Отправлено: anDROid от Апреля 03, 2011, 17:55
loop аллокирован на стеке
По-русски пжст,как будет правильно?


Название: Re: QEventLoop как работает?
Отправлено: Sahab от Апреля 03, 2011, 22:09
как только выходит из блока(удаляется объект) происходит дисконнект, с чего грохатся...
а по теме - QEventLoop выполняет в цикле не команды, а обрабатывает отложенные события(и поступающие в дальнейшем) до тех пор пока не получит quit()

к примеру вместо blablabla могла быть асинхронная(!) отправка данных в сокет, если бы вместо этого была бы синхронная операция, то она бы выполнилась до loop.exec();