Бесконечная нить, которая может или не может запускать Cdialog в каждом цикле

StackOverflow https://stackoverflow.com/questions/3703320

Вопрос

Я работаю над проектом MFC, где мне нужен отдельный цикл, который будет работать постоянно или раз каждые несколько секунд, и каждый раз, когда он может или не может запустить диалог, чтобы получить некоторый ввод от пользователя. Я думал об использовании afxbeginthread, но из того, что я читал об этом, это на самом деле не работает с непрерывной петлей.

Это было полезно?

Решение

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

Если все, что вам нужно, это какой -то сигнал, который стреляет каждые несколько секунд, то вы хотите таймер. Отказ Установите таймер для периода таймера, который вы хотите, и когда ваш основной поток обрабатывал желаемое сообщение WM_TIMER, вы можете вспомнить диалог и сделать свое дело.

Если вы хотите, чтобы ваш рабочий поток выполнял какую -то работу, которая может включать или не включать запрос пользователя за информацию, то вы захотите использовать ваш поток Postmessage () Чтобы отправить сообщение в основной поток, обработайте это сообщение в основном потоке, попросив пользователя данных, а затем отправив сигнал обратно в поток работника с входными данными. Один из способов достичь последнего - это позвонить Queueuserapc () Из основного потока с ручкой потока рабочей потока и указателем на функцию, которая выполняет что-то с вновь введенными данными.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top