Multithreading in VB!!! (updated)
Finally it is there!
The first multithreading example on PSC. About half a year ago, I looked on PSC for some multithreading stuff and found nothing. Then when I had improved my skills, I finally made my own multithreading code.
Now have fun with this and vote for me!!!
Updates:
-Fixed the bug that the program didn´t exit properly
-Added code in the multithreading class that prevents a thread from being created twice
-Fixed the bug in the PropertyLet procedure Priority (Thanks to Gil for letting me know).
It worked with VB6 but it didn´t compile with VB5 and now it works
Original Author: Philipp E. Weidmann
Code
Multithreading Hi, welcome to this little tuturial on Win32 multithreading in For more mutithreading examples download the .zip file which This tutorial is also included in the .zip file so you don´t 1. What is multitasking? On Windows, as it is a 32 bit operating system, more then You can switch between these tasks using the buttons in the This ability of Windows to handle various tasks at once is 2. What is multithreading? But Windows can do even more. Not only various tasks can run at once, but one task can The ability of Windows to allow one app to handle multiple 3. How can I implement multithreading in my VB program? To use the cool multithreading in your VB app, you need some The first and most important is the CreateThread Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long What it does? It creates a new thread in your app. Parameters ByVal lpThreadAttributes As Any: ByVal dwStackSize As Long: ByVal lpStartAddress As Long: ByVal dwCreationFlags As Long: lpThreadID As Long: This is a ByRef The return value of the CreateThread function The next important API call is SetThreadPriority Declare Function SetThreadPriority Lib "kernel32" (ByVal hThread As Long, ByVal nPriority As Long) As Long It sets the priority of a specified thread. Parameters : ByVal hThread As Long: The ByVal nPriority As Long: The To get the actual priority of a thread use the GetThreadPriority There are two more interesting threading calls, SuspendThread Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As Long Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long SuspendThread disables a ByVal hThread As Long: The The last call, TerminateThread Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long Parameters : ByVal hThread As Long: We know ByVal dwExitCode As Long: An 4. Thank you Thank you for reading this tutorial. Now you know the most Philipp Weidmann
Visual Basic.
includes a full sample project and my clsThreading.cls which makes
multithreading much easier.
have to read it here.
one task can run at once. Everybody knows that, you can e.g. run Paint and Windows
Notepad at the same time.
taskbar.Well, they do not really run at the same time, because only one
app can control the CPU at once, but Windows switches the processor control
between these apps very fast, so that it seems that they are running at the same
time.
called multitasking.
create multiple threads, where every thread has its own function. For
example, Windows Explorer can copy a huge file (with the file copy dialog) and,
at the same time, you can still use the TreeView to navigate through the folders.
A normal Visual Basic app is disabled until a task is finished (e.g. open a big
file). In a multithreaded program, you can also click the titlebar and this
won´t stop the program´s activities.
threads is called multithreading.
API calls (or my clsThreading.cls which is included in the .zip file) :
call :
:
The security attributes for the threads. The normal type is SECURITY_ATTRIBUTES,
but you don´t need this parameter so use ByVal 0&
as value.
Tells Windows how much stack memory the thread should have. We don´t need
it, use ByVal 0& for this parameter.
This is the most important parameter. It tells Windows which function the
thread has to execute. To use this parameter, we need the AddressOf
operator which can be used with public functions in public modules
only. So place your threaded function in a module and for the lpStartAddress
parameter use AddressOf YourFunction.
The creation flags for the thread. To use this parameter, search the CREATE_*
constants in the API Viewer (they are also in clsThreading.cls). One
interesting flag is the CREATE_SUSPENDED flag,
which allows you to create the thread disabled (not running). If you don´t
need this parameter, use ByVal 0&.
parameter which represents the ID of the created thread.
is the handle to the created thread. A handle to a thread is like a Window
handle (hWnd). It allows you to take control over the thread. If the CreateThread
function returns 0, it failed to create the thread.
:
handle to the thread. You can use for example the return value of the CreateThread
call.
new priority of the specified thread. The thread priority has five major
values: THREAD_PRIORITY_LOWEST, THREAD_PRIORITY_BELOW_NORMAL,
THREAD_PRIORITY_NORMAL, THREAD_PRIORITY_ABOVE_NORMAL
and THREAD_PRIORITY_HIGHEST which should be
self-explaining. The constants for these values can be found in the API
viewer (and in clsThreading.cls).
call.
and ResumeThread :
thread and ResumeThread enables a disabled
thread. Parameters :
handle to the thread we want to disable/enable.
fully stops a thread. It is important that you stop all threads this way before
closing your application because otherwise, it might crash.
it: The handle to the thread we want to terminate.
exit code (not needed). Use ByVal 0& for
this parameter.
common Win32 multithreading calls, you can create, stop, enable, disable threads
and you can change the priority of threads. Did you learn something? If yes,
please vote for me. And excuse me for my bad english because I´m german.
About this post
Posted: 2002-06-01
By: ArchiveBot
Viewed: 130 times
Categories
Attachments
CODE_UPLOAD140861232001.zip
Posted: 9/3/2020 3:45:00 PM
Size: 10,018 bytes
Loading Comments ...
Comments
No comments have been added for this post.
You must be logged in to make a comment.