Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > как сделать в ms vb6 асинхронные события?


Автор: leniviy 9.7.2004, 18:27
надо, чтобы событие вызывалось аналогично таймеру или ExecuteComplete в ADO.

Автор: Guest 9.7.2004, 22:07
leniviy, поподробнее пожалуйста

Автор: leniviy 11.7.2004, 00:00
Конкретно, мне надо реализовать в проге событие ApplicationOnIdle ( по аналогии с VCL ). Я пробовал ставить хук на WH_FOREGROUNDIDLE из callback ф-ции вызывать событие, но при этом появились всякие глюки. например, при отладке зависает.

Автор: arilou 15.7.2004, 12:54
Вообще, VB - это однопоточный язык, и там многое сделано для того, чтобы _не_ дать программеру его обмануть smile.gif

Можно сделать ActiveX биб-ку, в которой будет метод для установки указателя на callback. Этот метод будет запускать Timer, и по таймеру дергать callback.

В VB в модуле определяешь callback-функцию, и передаешь ее через AddressOf
Что-то типа:

Код

sub CallbackProc()
 MsgBox "Callback"
end sub

dim myTmr as MyTimer.MyTimer

myTmr = new MyTimer.MyTimer
myTmr.Start(AddressOf CallbackProc)


Думается мне, что в методе CallbackProc лучше брейкпоинтов не ставить wink.gif

Автор: boevik 15.7.2004, 13:15
Цитата
Код
myTmr.Start(AddressOf CallbackProc)

Как запустить функцию CallbackProc из Start в классе MyTimer?

Автор: arilou 15.7.2004, 13:33
Цитата(boevik @ 15.7.2004, 13:15)
Цитата
Код
myTmr.Start(AddressOf CallbackProc)

Как запустить функцию CallbackProc из Start в классе MyTimer?

Сорри, я не добавил, что ActiveX биб-ку надо писать на ATL C++ и использовать там Win API:

Вот кусок кода:

Код


MyTimer *current;

STDMETHODIMP MyTimer::Start(VARIANT *callback)
{
m_hTimer = SetTimer(NULL, TIMER_EVENT_ID, nTimerSpan, (TIMERPROC)TimerProc);
current = this;
m_cbk = (CALLBACKFUNC*)callback->byref;

return S_OK;
}

void MyTimer::CallBack()
{
m_cbk();
}

VOID CALLBACK TimerProc(HWND hWnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
current->CallBack();
}


Автор: leniviy 16.7.2004, 15:55
Пожалуй, это слишком сложно. Раз так, возьму VB'шный таймер и буду из его события вызывать свои

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)