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

Автор Тема:   Опять я со своими таймерами... ;-)
Kosha опубликован 10-04-2001 20:00 MSK   Click Here to See the Profile for Kosha   Click Here to Email Kosha  
Как тут (недавно) посоветовал глубокоуважаемый модератор, переделал все на multimedia-timer'ы. Но тут же возникла проблема еще страннее чем в тот раз ;-))
Я делаю таймер в CDocument. функция, где он делается, вызывается из CView. причем делаю
timeSetEvent(wTimerDelay,wTimerRes,TimerCallback,(ULONG)this,TIME_PERIODIC);

но в TimerCallback и всем, что вызывается из него, почему-то в списке CView'ов класса CDocument "обрубаются" все CView. Выглядит это как в ASSERT_VALID документа GetNextView возвращает СОВСЕМ кривой поинтер. В это же время, все мемберы CDocument вызываются и обрабатываются очень даже нормально ;-)
Кто поможет бедному прогламеру? ;-)

aldep опубликован 10-04-2001 22:17 MSK     Click Here to See the Profile for aldep  Click Here to Email aldep     
Точно не знаю, но есть идея, что связано с тем, что все вызовы callback'ов в timeXXX функциях идут в отдельной специально созданной нити. Может поэтому?
Kosha опубликован 11-04-2001 12:15 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
но тогда почему все кроме View'ов нормально?
Проверил, поток один ;-((((
BTW, я так и не понял: зачем используется
timeBeginPeriod и когда вызывать timeEndPeriod???
Kosha опубликован 11-04-2001 12:53 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Тьфу ты.
Потока-то два, а как это влияет на поинтеры объектов?
OlegN опубликован 11-04-2001 12:31 MSK     Click Here to See the Profile for OlegN  Click Here to Email OlegN     
А как ты объявил функцию TimerCallback ?
Как член твоего класса CDocument ?
Это делать нельзя !
Я бы написал так :
void CALLBACK MyTimeProc(
UINT uID,
UINT uMsg,
DWORD dwUser,
DWORD dw1,
DWORD dw2
)
{
CMyDocument* pThis = (CMyDocument*)dwUser;
}
OlegN опубликован 11-04-2001 12:48 MSK     Click Here to See the Profile for OlegN  Click Here to Email OlegN     
За примером сходи на
http://support.microsoft.com/support/kb/articles/q153/4/00.asp
Kosha опубликован 11-04-2001 15:22 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Именно так и объявляю. Пробовал также в CDocument как static, и все равно такой баг.

А насчет экзампла - там через, извиняюсь, большую задницу, и неохота лишние DLLки подрубать ;-(((((((

aldep опубликован 11-04-2001 21:17 MSK     Click Here to See the Profile for aldep  Click Here to Email aldep     
2 Kosha
А ты попробуй пошагово зайти в AssertValid функцию. Исходники MFC то есть. И тогда разберешься что ей не нравится. Если что интересное накопаешь - поделись с народом.

P.S. Мне все же кажется что там все с нитями связанно.

Kosha опубликован 11-04-2001 21:22 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Да написал же:
Вхожу в CDocument::Assert_valid, там есть такой кодик:
void CDocument::AssertValid() const
{
CObject::AssertValid();

POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CView* pView = GetNextView(pos);
ASSERT_VALID(pView);
}
}
так вот, CObject::AssertValid() прокатывает, а pView, вернутый GetNextView'ом, уже нет. Сам поинтер вместо нормального HWnd содержит какой-то DWORDовый мусор. Причем pos, вернутый GetFirstViewPosition, тоже кривой...

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


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.