Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: akaMDA от Ноябрь 25, 2010, 23:07



Название: run() и exec()
Отправлено: akaMDA от Ноябрь 25, 2010, 23:07
Код:
void dbWord::run()
{
    while(1)
    {
         ...
    }

    exec();
}

В цикле производится обработка данных. При этом эти данные приходят из другого потока через сигнал. Будет ли сигнал приходить? Ведь до exec() не дошло еще.


Название: Re: run() и exec()
Отправлено: BRE от Ноябрь 25, 2010, 23:18
Нет, но можно сделать что-бы доходили.


Название: Re: run() и exec()
Отправлено: akaMDA от Ноябрь 25, 2010, 23:25
Как? цикл убрать?


Название: Re: run() и exec()
Отправлено: BRE от Ноябрь 25, 2010, 23:28
Как? цикл убрать?
Зачем, в нем прокручивать события из очереди.
Смотри QEventLoop.


Название: Re: run() и exec()
Отправлено: akaMDA от Ноябрь 25, 2010, 23:41
Код:
void dbWord::run()
{
    while(1)
    {
         ...
         processEvents();
    }

    exec();
}
Так?
А сколько событий может храниться  в очереди?
И сколько событий обработается по processEvents()? Все, что есть в очереди на тот момент, или еще и те, что прибудут во время выполнения?


Название: Re: run() и exec()
Отправлено: BRE от Ноябрь 25, 2010, 23:51
Ну я бы делал как-то так:
Код
C++ (Qt)
void dbWord::run()
{
QEventLoop loop;
while(1)
{
...
loop.processEvents();
}
}
 

Смотри:
bool QEventLoop::processEvents ( ProcessEventsFlags flags = AllEvents )
void QEventLoop::processEvents ( ProcessEventsFlags flags, int maxTime )
enum ProcessEventsFlags

Ну и попробуй это погонять... Мне тоже интересно сколько событий может храниться в очереди. :)


Название: Re: run() и exec()
Отправлено: akaMDA от Ноябрь 26, 2010, 20:00
void QEventLoop::processEvents ( ProcessEventsFlags flags, int maxTime )
при этой функции , если время истекло до конца выполнения слота, то он будет как бы заморожен и доделан? или игнорирован  и не выполнен до конца?