Программа не отвечает до выполнения функции - PullRequest
0 голосов
/ 30 мая 2011

Visual Studio, C ++, приложение Form

(я новичок в Visual C ++)

У меня есть приложение, в котором есть кнопка, функция которой очень сложна и занимает около минутыдо конца.

Также: Пока функция выполняется, программа перестает отвечать на запросы.Окно обновляется, когда this-> Refresh ();называется, но когда я щелкаю где-то в окне, то оно даже больше не обновляется.Функция продолжает работать до тех пор, пока она не выполнит свою работу, а затем все вернется в нормальное состояние.

Я хочу иметь возможность нажать кнопку «Стоп».

Как мне это сделать

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

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

2 голосов
/ 30 мая 2011

Ответ - многопоточность ... если ваше приложение имеет один поток и оно выполняет вычисления, то оно не сможет делать что-либо еще, например обновить пользовательский интерфейс или обработать события (кнопка «Стоп»)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...