Russian Qt Forum

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



Название: Действия при закритии потока.
Отправлено: FreTFuL от Август 20, 2010, 22:53
Когда закривається главное окно приложения понятное дело закриваються все потоки. У меня в потоке идет отправка почти. Мне нужно чтоби в момент когда поток собирается закриться виполнилась моя функция по сохранению данних. что мне делать? Подскажите пожалуста какую функцию нужно перезагрузить или какие сигнали использовать.


Название: Re: Действия при закритии потока.
Отправлено: merke от Август 21, 2010, 06:37
В заголовочном файле:

protected:
    virtual void closeEvent(QCloseEvent *e);

В файле исходников:

void TextEdit::closeEvent(QCloseEvent *e)
{
    if (maybeSave())//Вызываем функцию например: сохранения файла
        e->accept();
    else
        e->ignore();
}


Название: Re: Действия при закритии потока.
Отправлено: FreTFuL от Август 21, 2010, 08:45
Функция сохранения находится не в том отоке что гравное окно и когда я перед закритиєм висилаю сигнал сохранится ничего не получається поток просто закривається


Название: Re: Действия при закритии потока.
Отправлено: Авварон от Август 21, 2010, 10:37
void QApplication::lastWindowClosed ()   [signal]


Название: Re: Действия при закритии потока.
Отправлено: FreTFuL от Август 21, 2010, 11:53
и оно обработает соединенний сигнал а на закроет тот поток?


Название: Re: Действия при закритии потока.
Отправлено: Авварон от Август 21, 2010, 12:28
ты можешь поставить чтоб QApplication не выходил при закрытии окна, сам подписаться на этот сигнал, послать сигналы потокам на выключение, подождать их и только после этого вырубить приложение.


Название: Re: Действия при закритии потока.
Отправлено: Igors от Август 21, 2010, 12:41
Нет способа это сделать без участия самой нитки (отправка почты). Она должна напр периодически проверять флажок и если он установлен, то прекратить отправку, записать данные и выйти из run. Когда главная нитка получит closeEvent, она должна установить этот флажок и подождать пока отправка сделает свои дела

Код
C++ (Qt)
mailThread.mStopFlag = true;
mailThread.wait();
 

P.S. Пожалуйста решите проблему с буквой Ы, а то Ваши посты трудно читать