Click to See Complete Forum and Search --> : Multi Threading Problem
Lev FatMan
May 13th, 2001, 03:46 AM
I understand that there is a problem to call for a Visual basic function from a thread that no it created. How can I overcome it though, Heard that Messaging is optional but I do not know how to implement it.
Any help would be appriciated,
FatMan
cksiow
May 14th, 2001, 04:47 AM
it you are talking about normal function in standard module, it should be ok to be called by other thread, just to beware on global variable as VB is apartment-threaded.
if you are talking about Form function, then sending message is one way. but before you send the message, you need to subclass the form to capture the message that u r going to use.
refer http://vblib.virtualave.net there is 2 class, vbSubclassing & vbMultiThreading that make u life easy, HTH
maybe ur situation is a bit difficult, but if I didn't answer ur question, let make me understand and maybe I can be more helpful.
Lev FatMan
May 14th, 2001, 06:18 AM
I am trying the Messaging way now for some time, I sent message from a Dll function I called numbered 555 and could not catch it in VB, I will try again, but if you have a sample code for messaging with DLL I would be very greatfull.
FatMan
cksiow
May 14th, 2001, 07:51 PM
you should got an example. Please note, user define message must be declare as follow
WM_LEV_MSG = WM_USER + 555&
instead of
WM_LEV_MSG = 555&
cause may be used by the system, by adding WM_USER, you are safe.
Clearcode
May 15th, 2001, 06:29 AM
For completeness you should not create your own constant for your message like this because you have no guarantee that some other program might not use that same value for one of it's messages and broadcast it thus confusing your application.
To prevent this you should register your windows message using the RegisterWindowsMessage API call:
'Declaration
private Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" (byval lpString as string) as Long
What I tend to do is have this wrapped up in a function shared by both applications thus:
public Function LevWindowMessage() as Long
If mMessage = 0 then
mMessage = RegisterWindowMessage("WM_LEV_MSG")
End If
LevWindowMessage = mMessage
End Function
Which you can then send and recieve safely.
For a complete example of how this is used, see the example on http://www.planetsource.com entitled "A better systray".
-------------------------------------------------
Ex. Datis: Duncan Jones
Merrion Computing Ltd
http://www.merrioncomputing.com
codeguru.com
Copyright Internet.com Inc., All Rights Reserved.