Как прервать цикл в момент когда пользователь нажал крестик "закрыть окно"?

S0ME0NE
Дата: 13.10.2014 12:16:03
Всем добрый день.
К примеру простенькая программа, что-то читает в цикле или обрабатывает
и в этот момент пользователю надоело ждать или передумал, короче нажал в правом верхнем углу окна, крестик "закрыть окно".
Дайте пожалуйста примерчик кода, где цикл прерывается пользователем.
mayton
Дата: 13.10.2014 12:26:52
Если вкратце - то вычисления не запускают в стеке WindowProc. Надо переписать приложение по другому.
Dima T
Дата: 13.10.2014 12:26:58
Программа какая? Консольная? Оконная?
Для консольной SetConsoleCtrlHandler()
Для оконной обрабатывай сообщение WM_CLOSE. Только чтобы оно обработалось - твой цикл считания надо в отдельный поток вынести.
S0ME0NE
Дата: 13.10.2014 12:34:00
программка для Win XP оконная, очень простенькая
Мне надо уметь обрабатывать действия пользователя, например закрыть программу в момент выполнения (скажем чтения большущего текстового файла)

Пожалуйста дайте пример кода по-проще или ссылку.
Dimitry Sibiryakov
Дата: 13.10.2014 12:41:23

S0ME0NE
Пожалуйста дайте пример кода по-проще

bool StopNow = false;

while(true)
{
   // Что-то делаем
   if (StopNow)
     break;
}

Posted via ActualForum NNTP Server 1.5

S0NE0NE
Дата: 13.10.2014 12:45:34
Dimitry Sibiryakov
тут нет анализа что именно пользователь прервал выполнение программы и к тому meyton советует как-то по другому делать обработки
Dima T
Дата: 13.10.2014 12:48:55
В двух словах не расскажешь. Рабочий поток всегда лдолжен быть свободен чтобы обрабатывать сообщения от виндовса, поэтому долгоиграющие рассчеты надо выносить в отдельный поток.
_beginthreadex() создает поток, там же внизу пример.

PS Лучше книжку какую-нибудь прочитай про WinAPI для работы с потоками, синхронизацию потоков, про очередь сообщений и оконные сообщения. Подводных камней много при многопоточности, все не расскажешь.
S0ME0NE
Дата: 13.10.2014 12:53:38
Dima T
Благодарю.
MasterZiv
Дата: 13.10.2014 12:54:37
S0ME0NE
программка для Win XP оконная, очень простенькая
Мне надо уметь обрабатывать действия пользователя, например закрыть программу в момент выполнения (скажем чтения большущего текстового файла)

Пожалуйста дайте пример кода по-проще или ссылку.


Она и так это умеет делать.
Её для этого не нужно отдельно как-то обучать.

Как только закончится долгий расчёт, программа получит соотв. сообщение и, обработав его, закроется.
Dima T
Дата: 13.10.2014 12:58:35
Почитай Рихтера. Главы 6-9, 26. А лучше целиком.