подвисание интерфейса при длительных вычислениях
От: Stas2003  
Дата: 11.02.04 13:01
Оценка:
вопрос такой. В программе по нажатию на кнопку происходят длительные вычисления в цикле.
время около 20 минут. В это время программный интерфес подвисает (не реагирует не на
какие кнопки не на закрытие, не на прокрутку списков, даже окно не обновляется при его
перекрытии). Я где-то читал но не могу ни вспомнить, ни найти как можно сделать обновление
формы при таком вычислении. Вычисление производится в цикле. т.е. есть месту куда можно
вставить функцию которая будет обновлять. На visual basic-е вроде это Application.doEvents,
но мне нужно именно на visual с++ для MFC. Прошу помощи. Зарание спасибо за ответы.
Re: подвисание интерфейса при длительных вычислениях
От: Amon-RA  
Дата: 11.02.04 13:02
Оценка:
Здравствуйте, Stas2003, Вы писали:

S>вопрос такой. В программе по нажатию на кнопку происходят длительные вычисления в цикле.

S>время около 20 минут. В это время программный интерфес подвисает (не реагирует не на
S>какие кнопки не на закрытие, не на прокрутку списков, даже окно не обновляется при его
S>перекрытии). Я где-то читал но не могу ни вспомнить, ни найти как можно сделать обновление
S>формы при таком вычислении. Вычисление производится в цикле. т.е. есть месту куда можно
S>вставить функцию которая будет обновлять. На visual basic-е вроде это Application.doEvents,
S>но мне нужно именно на visual с++ для MFC. Прошу помощи. Зарание спасибо за ответы.

Копай в сторону многопоточности — AfxCreateThread
Re[2]: подвисание интерфейса при длительных вычислениях
От: Stas2003  
Дата: 11.02.04 13:04
Оценка:
AR>Копай в сторону многопоточности — AfxCreateThread

Нет, необходимо чтоб все было в одном Threade к сожалению
Re: подвисание интерфейса при длительных вычислениях
От: algol Россия about:blank
Дата: 11.02.04 13:05
Оценка:
Здравствуйте, Stas2003, Вы писали:

S>вопрос такой. В программе по нажатию на кнопку происходят длительные вычисления в цикле.

S>время около 20 минут. В это время программный интерфес подвисает (не реагирует не на
S>какие кнопки не на закрытие, не на прокрутку списков, даже окно не обновляется при его
S>перекрытии). Я где-то читал но не могу ни вспомнить, ни найти как можно сделать обновление
S>формы при таком вычислении. Вычисление производится в цикле. т.е. есть месту куда можно
S>вставить функцию которая будет обновлять. На visual basic-е вроде это Application.doEvents,
S>но мне нужно именно на visual с++ для MFC. Прошу помощи. Зарание спасибо за ответы.

    MSG msg;
    while( PeekMessage( &msg, hwnd, 0, 0, PM_REMOVE ) )
    { 
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    }
Re[2]: подвисание интерфейса при длительных вычислениях
От: Stas2003  
Дата: 11.02.04 13:12
Оценка:
S>>вопрос такой. В программе по нажатию на кнопку происходят длительные вычисления в цикле.
S>>время около 20 минут. В это время программный интерфес подвисает (не реагирует не на
S>>какие кнопки не на закрытие, не на прокрутку списков, даже окно не обновляется при его
S>>перекрытии). Я где-то читал но не могу ни вспомнить, ни найти как можно сделать обновление
S>>формы при таком вычислении. Вычисление производится в цикле. т.е. есть месту куда можно
S>>вставить функцию которая будет обновлять. На visual basic-е вроде это Application.doEvents,
S>>но мне нужно именно на visual с++ для MFC. Прошу помощи. Зарание спасибо за ответы.

A>
A>    MSG msg;
A>    while( PeekMessage( &msg, hwnd, 0, 0, PM_REMOVE ) )
A>    { 
A>        TranslateMessage(&msg); 
A>        DispatchMessage(&msg); 
A>    }
A>


Спасибо, практически то что нужно.
Re[3]: подвисание интерфейса при длительных вычислениях
От: OLEGus1 Россия  
Дата: 11.02.04 13:20
Оценка:
On Wed, 11 Feb 2004 13:12:15 GMT, Stas2003 <26263@news.rsdn.ru> wrote:

S>>вопрос такой. В программе по нажатию на кнопку происходят длительные

вычисления в цикле.
S>>время около 20 минут. В это время программный интерфес подвисает (не
реагирует не на S>>какие кнопки не на закрытие, не на прокрутку списков,
даже окно не обновляется при его S>>перекрытии). Я где-то читал но не могу
ни вспомнить, ни найти как можно сделать обновление S>>формы при таком
вычислении. Вычисление производится в цикле. т.е. есть месту куда можно
S>>вставить функцию которая будет обновлять. На visual basic-е вроде это
Application.doEvents, S>>но мне нужно именно на visual с++ для MFC. Прошу
помощи. Зарание спасибо за ответы.
 
A>
A>MSG msg;
A>while( PeekMessage( &msg, hwnd, 0, 0, PM_REMOVE ) )
A>{ A>TranslateMessage(&msg); A>DispatchMessage(&msg); A>}
A>

 
> Спасибо, практически то что нужно.

А еще можно попробовать запхать искусственный цикл в onidle

--
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
Posted via RSDN NNTP Server 1.8 beta
Crescite, nos qui vivimus, multiplicamini
Re[3]: подвисание интерфейса при длительных вычислениях
От: kmn Украина  
Дата: 11.02.04 14:52
Оценка:
Здравствуйте, Stas2003, Вы писали:

A>>
A>>    MSG msg;
A>>    while( PeekMessage( &msg, hwnd, 0, PM_REMOVE ) )
A>>    { 
A>>        TranslateMessage(&msg); 
A>>        DispatchMessage(&msg); 
A>>    }
A>>


S>Спасибо, практически то что нужно.


С поправкой на ветер (MFC) правильнее будет так:

    MSG msg;
    while(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
          AfxGetThread()->PumpMessage();


И не забудьте, что теперь можно будет снова нажать на кнопку(и не один раз)!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.