Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Программы с длинными циклами / 3 сообщений из 3, страница 1 из 1
15.12.2003, 13:56
    #32352671
Mi
Mi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программы с длинными циклами
Как сделать, чтобы при выполнении длинного цикла (на окне просто бежит ProgressBar) программа продолжала реагировать на внешние воздействия - перерисовывала окно (SetFocus), позволяла нажать на кнопки?
Заранее спасибо.
...
Рейтинг: 0 / 0
15.12.2003, 14:07
    #32352690
olk
olk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программы с длинными циклами
Или вставить в цикл обработчик сообщений ...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
MSG message;

for(...;...;...)
{

....
....

if(::PeekMessage(&message,NULL, 0 , 0 ,PM_REMOVE))
	{
	::TranslateMessage(&message);
	::DispatchMessage(&message);
	}
...
}


Но лучше запустить этот цикл в отделном треде

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
UINT WorkerThread(LPVOID pParam)
{
    for(...;...;...)
    {
      .....
    }
  
return  0 ;
}

void CMyApp::MyFunc() 
{
	// TODO: Add your command handler code here
	CWinThread* pWThread = AfxBeginThread(WorkerThread, this);
	
}
...
Рейтинг: 0 / 0
15.12.2003, 19:08
    #32353187
vdimas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программы с длинными циклами
да, позволять нажиматься кнопкам внутри цикла - это очень аккуратно писать такие штуки надо, как бы не "свалиться"... а то в обработчике нажатия кнопки обычно начинает жить совсем своя ветка программы :)), т.е. прогу надо усложнить малость, и по Cancel, скажем, просто выставить какой-нить флаг окончания цикла.

если нужно, чтобы просто окно перерисовывалось, то просто вызывай периодически RefreshWindow (не требуется вытаскивать сообщения из очереди), или в цикле обработки сообщений фильтуй эти самые сообщения, т.е. вытаскивай не все, а только всякие WM_PAINT, WM_ERASEBACKGROUND, WM_NCPAINT...
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Программы с длинными циклами / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]