timeSetEvent & MFC
От: Terre Россия http://terre.h15.ru
Дата: 20.05.02 10:55
Оценка:
Как использовать timeSetEvent с MFC ?????
У меня с этим небольшие проблемы
например мне надо сделать функцию callback таймера, но надо работать и с классами MFC
как ??????
Maybe rain,
Maybe snow,
Maybe yes,
Maybe no.
Re: timeSetEvent & MFC
От: Хитрик Денис Россия RSDN
Дата: 20.05.02 10:58
Оценка:
Перенесено в MFC из С++. Внимательнее выбирайте форум!
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re: timeSetEvent & MFC
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 21.05.02 01:49
Оценка:
Здравствуйте Terre, Вы писали:

T>как ??????


что конкретно ты хочешь сделать, а оно не получается?
Re[2]: timeSetEvent & MFC
От: Terre Россия http://terre.h15.ru
Дата: 21.05.02 03:07
Оценка:
Здравствуйте Odi$$ey, Вы писали:

T>>как ??????


O$>что конкретно ты хочешь сделать, а оно не получается?

Конкретно не могу получить из функции TimerCallBack доступ к любому члену класса CMySuxxDlg
например:

void __stdcall TimerCallBack(unsigned int a, unsigned int b, unsigned long c, unsigned long d, unsigned long e)
{
CMySuxxDlg::FuckThisClass();
}

Init()
{
timerID = timeSetEvent(mysuxxms, mysuxxres, &TimerCallBack, 100, TIME_PERIODIC);
}
Maybe rain,
Maybe snow,
Maybe yes,
Maybe no.
Re[3]: timeSetEvent & MFC
От: Andir Россия
Дата: 21.05.02 03:14
Оценка:
Здравствуйте Terre, Вы писали:

T>Здравствуйте Odi$$ey, Вы писали:


T>>>как ??????


O$>>что конкретно ты хочешь сделать, а оно не получается?

T>Конкретно не могу получить из функции TimerCallBack доступ к любому члену класса CMySuxxDlg

T>например:

T>void __stdcall TimerCallBack(unsigned int a, unsigned int b, unsigned long c, unsigned long d, unsigned long e)

T>{
T> CMySuxxDlg::FuckThisClass();
T>}

T>Init()

T>{
T> timerID = timeSetEvent(mysuxxms, mysuxxres, &TimerCallBack, 100, TIME_PERIODIC);
T>}

Передай в функцию указатель на твой класс, например через DWORD dwUser — User-supplied callback data в функции callback.

Удачи Andir!
Re[3]: timeSetEvent & MFC
От: Alex Fedotov США  
Дата: 21.05.02 03:19
Оценка: 2 (1)
Здравствуйте Terre, Вы писали:

T>Конкретно не могу получить из функции TimerCallBack доступ к любому члену класса CMySuxxDlg

T>например:

T>void __stdcall TimerCallBack(unsigned int a, unsigned int b, unsigned long c, unsigned long d, unsigned long e)

T>{
T> CMySuxxDlg::FuckThisClass();
T>}

T>Init()

T>{
T> timerID = timeSetEvent(mysuxxms, mysuxxres, &TimerCallBack, 100, TIME_PERIODIC);
T>}

А ты попробуй вместо магического числа 100 передать указатель на свой класс и воспользоваться им в TimerCallback.

[с]
CMyDlg::Init()
{
timerID = timeSetEvent(mysuxxms, mysuxxres, &StaticTimerCallBack, (DWORD_PTR)this, TIME_PERIODIC);
}

/* static */
void CALLBACK CMyDlg::StaticTimerCallBack(UINT uID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
{
CMyDlg * pThis = (CMyDlg)dwUser;
pThis->TimerCallBack(uID);
}

void CMyDlg::TimerCallBack(UINT uID)
{
// здесь можно свободно обращаться к членам класса
}
[/c]

Только учти, что callback-функция будет вызываться из другого потока, так что надо будет позаботиться о синхронизации в тех местах, где это необходимо. Да и не лишне будет напомнить, что

<!-- msdn -->
Applications should not call any system-defined functions from inside a callback function, except for PostMessage, timeGetSystemTime, timeGetTime, timeSetEvent, timeKillEvent, midiOutShortMsg, midiOutLongMsg, and OutputDebugString
<!-- /msdn -->

Особенно это справедливо для Win9x.
-- Alex Fedotov
Re[4]: timeSetEvent & MFC
От: Terre Россия http://terre.h15.ru
Дата: 21.05.02 09:56
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>Только учти, что callback-функция будет вызываться из другого потока, так что надо будет позаботиться о синхронизации в тех местах, где это необходимо. Да и не лишне будет напомнить, что


AF><!-- msdn -->

AF>Applications should not call any system-defined functions from inside a callback function, except for PostMessage, timeGetSystemTime, timeGetTime, timeSetEvent, timeKillEvent, midiOutShortMsg, midiOutLongMsg, and OutputDebugString
AF><!-- /msdn -->

AF>Особенно это справедливо для Win9x.


Во первых thnx... это вроде работает...

Еще раз, как этого избежать ???
Мне нужно чтоб callback вызывался ровно в через определенный промежуток времени....
без всяких +-...

Или под MFC это сделать нельзя ??
И еще. Иногда прога виснет через некоторое время (интервал 1мс, точность 0) и если запущена другая прога (например winamp).
Maybe rain,
Maybe snow,
Maybe yes,
Maybe no.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.