Как прервать запуск select / pselect в QThread - PullRequest
0 голосов
/ 07 сентября 2010

У меня есть QThread, который читает из сокета и отправляет сигнал (сигнал QT), когда есть какие-либо доступные данные.Это было бы легко с блокировкой read (2), но мне нужно иметь возможность остановить поток снаружи, не ожидая слишком долго.

Если бы я использовал pthread, я бы использовал pselect и pthread_kill(thread_id, some_signal), ноQThread, похоже, не имеет подобных методов.И добавление зависимости от pthread в этот проект не кажется элегантным.

Я также не хочу использовать другие уродливые методы, такие как постоянная попытка чтения из сокета с небольшим временем ожидания.

Редактировать: сокеты не TCP, а Bluetooth L2CAP.

Ответы [ 3 ]

1 голос
/ 07 сентября 2010

Вместо самостоятельной работы с потоками вы можете использовать асинхронный интерфейс QTcpSocket.Посмотрите пример Fortune Client .

1 голос
/ 08 сентября 2010

Не слишком элегантное, но простое и работающее решение: создайте канал и позвольте select ждать либо трубу, либо мой сокет.Таким образом, я могу в любой момент остановить ожидание, записав что-то в канал.

0 голосов
/ 07 сентября 2010

Вы можете отправить сигнал в слот terminate() вашего QThread.Это остановит ваш поток в соответствии с политиками планирования ОС.

...