Как бороться с зависанием?

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
iscan
Сообщения: 5
Зарегистрирован: 20 фев 2005, 22:16

09 апр 2005, 21:45

или как передать управление окну (пишу на API).

например у меня в проге выполняются продолжительные вычисления, и пока они не закончатся прога не реагирует на InvalidateRect - ЗАВИСАЕТ.
Короче как с этим бороться?

Спасибо заранее.
Аватара пользователя
AiK
Сообщения: 2274
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

10 апр 2005, 12:44

Делай вычисления в отдельном потоке.
Даже самый дурацкий замысел можно воплотить мастерски
Hawk
Сообщения: 215
Зарегистрирован: 17 фев 2004, 14:52
Откуда: СПб
Контактная информация:

11 апр 2005, 09:09

Можно также после Invalidate вызвать UpdateWindow при этом окно переритсуется (обработается WM_PAINT) даже если вы не закончили работу в текущем обработчике события.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

11 апр 2005, 16:30

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

Код: Выделить всё

while (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
	if (::GetMessage(&msg, NULL, 0, 0) > 0)
	{
		::TranslateMessage(&msg);
		::DispatchMessage(&msg);
	}
}
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить