In this tutorial, multithreaded programming is explained using an example
"Counter
Thread".
What is multithreading? :
A thread is basically a path of execution through a program. It is also the
smallest unit of execution that Win32 schedules. A thread consists of a stack,
the state of the CPU registers, and an entry in the execution list of the system
scheduler. Each thread shares all of the process's resources.
The Microsoft Foundation Class Library (MFC) provides support for
multithreaded applications.
A "process" is an executing instance of an application. For
example, when you double-click the Notepad icon, you start a process that runs
Notepad. A "thread" is a path of execution within a process. When you
start Notepad, the operating system creates a process and begins executing the
primary thread of that process. When this thread terminates, so does the
process. This primary thread is supplied to the operating system by the startup
code in the form of a function address. Usually, it is the address of the main
or WinMain function that is supplied.
You can create additional threads in your application if you wish. You may
want to do this to handle background or maintenance tasks when you don't want
the user to wait for them to complete. All threads in MFC applications are
represented by
CWinThread
objects. In most situations, you don't even have to explicitly create these
objects; instead call the framework helper function
AfxBeginThread
, which creates the CWinThread object for you.
MFC distinguishes two types of threads: user-interface threads and worker
threads. User-interface threads are commonly used to handle user input and
respond to events and messages generated by the user. Worker threads are
commonly used to complete tasks, such as recalculation, that do not require user
input. The Win32 API does not distinguish between types of threads; it just
needs to know the thread's starting address so it can begin to execute the
thread. MFC handles user-interface threads specially by supplying a message pump
for events in the user interface. CWinApp is an example of a
user-interface thread object, as it derives from CWinThread and handles
events and messages generated by the user.
A process consists of one or more threads and the code, data, and other
resources of a program in memory. Typical program resources are open files,
semaphores, and dynamically allocated memory. A program executes when the system
scheduler gives one of its threads execution control. The scheduler determines
which threads should run and when they should run. Threads of lower priority may
have to wait while higher priority threads complete their tasks. On
multiprocessor machines, the scheduler can move individual threads to different
processors to "balance" the CPU load.
Each thread in a process operates independently. Unless you make them visible
to each other, the threads execute individually and are unaware of the other
threads in a process. Threads sharing common resources, however, must coordinate
their work by using semaphores or another method of inter process communication.
Please go through MSDN for more information about threads. Click on the appropriate link below to see the Video and the
source code of Counter Thread.
Multithreaded Programming using VC++