WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Парсинг данных с синхронной отрисовкой

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Парсинг данных с синхронной отрисовкой
lkv опубликован 28-05-2001 23:43 MSK   Click Here to See the Profile for lkv   Click Here to Email lkv  
Здравствуй, о всезнающий All!!!
У меня тут проблемка маленькая...

Надо получать данные в цикле СData::runCommandFile
и одновременно отрисовывать их (CView::OnDraw)...
и что-то такая фигня получается..., даже в разных
threads. Не подкинете ли работающий пример...
(Желательно на VC)

Спасибо за внимание.
С наилучшими пожеланиями, Константин.

OlegN опубликован 29-05-2001 13:57 MSK     Click Here to See the Profile for OlegN  Click Here to Email OlegN     
Все зависит от того, как часто (с какими временными промежутками) ты хочешь
читать СData::runCommandFile и обновлять
CView::OnDraw
Если это нужно нечасто (5-10 раз в секунду и реже), то используй оконный таймер для
получения данных и InvalidateRect для
перерисовки нужного региона окна.
Приблизительно так :
void CMyView::OnTimer(UINT nIDEvent )
{
bool bContinueRead = (m_CurDataIndex < MaxDataIndex); // определить продолжать ли обновление
if(!bContinueRead)
KillTimer(nIDEvent)
else
{
// Получаем следующий елемент
m_myData->GetNextData(m_CurDataIndex++)
CRect NewDataRect = // вычисляем прямоугольник, где будут отрисованы новые данные
// устанавливаем регион, который необходимо перерисовать
InvalidateRect(NewDataRect, TRUE);
}
}

void CMyView::StartTimer()
{
MaxDataIndex = 100;
m_CurDataIndex = 0;
SetTimer(MyTimerID, 100, 0); // обновление 10 раз в секунду
}

Ну еще в Message map нужно добавить
ON_WM_TIMER( )

lkv опубликован 29-05-2001 19:54 MSK     Click Here to See the Profile for lkv  Click Here to Email lkv     
нужно часто...
формат файла (размер ~ тысячи строк):

command1; [pause nnn;]
command2; [pause mmm;]
...
вызываю в цикле OnPaint...,
а перерисовка не происходит!!!

Окно остается белым!!!
Но если по нему повозить сверху другим,
то можно увидеть, что перерисовка все-таки
идет...

al опубликован 29-05-2001 20:08 MSK     Click Here to See the Profile for al  Click Here to Email al     
InvalidateRect только говорит системе "когда у тебя будет свободное время, пошли этому окну WM_PAINT". В Вашем случае такого времени - нет. Выход - после InvalidateRect вызывать функцию UpdateWindow

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.