LINUX.ORG.RU

(Qt) IMAP IDLE принудительно прервать соединение.


0

1

В общем, прошу у ЛОРа помощи. Есть Qt приложение на питоне (PyQt4), в нем есть QThread, в котором в бесконечном цикле while True имеется imap IDLE из питонячей imaplib2. Так вот вопрос: как оборвать этот idle без участия сервера и закрыть соединение с почтой, а то все работает пока не наступит таймаут у idle? qthread exit(), quit(), terminate() не катят - соединение остается либо несброшенным либо все равно ждет окончания работы треда.

Определи сначала сам для себя и _ясно_ сформулируй на основании каких параметров должен происходить выход из цикла. Ну а затем все становится до безобразия простым — бесконечный цикл заменяем условным и в теле цикла создаем триггер управляющий этим условием.

fat_angel ★★★★★
()

Не понял половины вышесказанного, но наверняка это надо делать с помощью QMutex.

В треде:

while(m_mutex.tryLock()) {
 // IMAP idle
 m_mutex.unlock();
}
// Закрываем соединение

Для прервания этого цикла извне этого потока:

my_thread.m_mutex.lock();
Obey-Kun ★★★★★
()
Ответ на: комментарий от fat_angel

Выход из цикла не выполнится, пока imap Idle не проснется - при любом раскладе. Хоть какой цикл туда воткни.

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