Бесконечный поток, который может или не может запустить CDialog каждый цикл - PullRequest
0 голосов
/ 13 сентября 2010

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

1 Ответ

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

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

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

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

...