Descriptions of multithreaded programming techniques (108433)
The information in this article applies to:
- The C Run-Time (CRT), when used with:
- Microsoft Visual C++, 32-bit Editions 1.0
- Microsoft Visual C++, 32-bit Editions 2.0
- Microsoft Visual C++, 32-bit Editions 2.1
- Microsoft Visual C++, 32-bit Editions 4.0
- Microsoft Visual C++, 32-bit Editions 4.1
- Microsoft Visual C++, 32-bit Editions 5.0
- Microsoft Visual C++, 32-bit Editions 6.0
This article was previously published under Q108433 SUMMARY The MTDLL sample illustrates several techniques and
concepts related to multithreaded programming in Win32. The sample uses a
multithreaded dynamic-link library (DLL) to implement six sorting algorithms.
The DLL is called into from a Microsoft Foundation Class (MFC) Libraries
application that uses a dialog box as the main window. The six sorting
algorithms implemented are the Bubble sort, Exchange sort, Heap sort, Insertion
sort, Quick sort, and Shell sort. Note The sample code has been
built using Visual C++, version 2.0. If you are using versions 4.0 or later,
you need to convert the project files to Developer Studio projects. To do so,
open a workspace specifying SORTDEMO.MAK and SORTDLL.MAK file. A message box
appears that prompts you for the project name and it does a conversion for you.
Visual C++ 5.0 and 6.0 cannot convert the Sortdll.mak. A makefile wrapper
project is generated instead. The following files are available for
download from the Microsoft Download
Center: Download the Mtdll.exe package now.
For more information about how to download Microsoft Support files, click the following article number to view the article in the Microsoft Knowledge Base:
119591 How to obtain Microsoft support files from online services
Microsoft scanned this file for viruses. Microsoft used the most current virus-detection software that was available on the date that the file was posted. The file is stored on security-enhanced servers that help prevent any unauthorized changes to the file.
MORE INFORMATION Some of the multithreaded concepts and techniques
illustrated by the sample are: - Conditionally using __declspec(dllexport) and
__declspec(dllimport) on function prototypes that reside in a header file that
is included in both the DLL and the calling application.
- Using __declspec(thread) to allocate thread-local data.
- Using a critical section object to control access to the
display.
- Handling termination of a currently executing thread.
- Using _beginthread() and _endthread() to handle thread
creation and termination.
The calling executable and the sorting DLL in this sample also
use mutual imports. That is, the executable calls routines that have been
exported from the DLL, and the DLL calls routines that have been exported from
the executable. The sample includes the import libraries needed to build both
the DLL and the calling executable. However, if the sample is modified and
additional functions are exported from both the executable and the DLL, the
mutual imports could make it impossible to build either the DLL or the
executable, because one must be built before the other. This situation can be
worked around by using the LIB utility with the /DEF option to build an import
library from a linker .DEF file. This technique is discussed in Chapter 4 of
the "Programming Techniques" manual and Chapter 3 of the "Build Tools User's
Guide" supplied with Visual C++ for Windows NT. This sample does not
use .DEF files to specify exported functions. It illustrates using __declspec
instead. However, the sample does include .DEF files for the DLL and the
executable, which can be used as starting points if at some point the LIB
utility needs to be used with the /DEF option to solve the problem of mutual
imports. This sample also uses CTL3D32.DLL to implement a 3-D look
for its dialog box controls. For CTL3D32.DLL to work, however, it must be
copied from the multithreaded DLL sample directory to the Windows NT SYSTEM32
subdirectory, for example C:\WINNT\SYSTEM32. After copying the DLL, it must be
deleted from the multithreaded DLL sample directory. If CTL3D32.DLL is not
copied to the \WINNT\SYSTEM32 directory and deleted from the multithreaded DLL
sample directory, a message box with the following error will be displayed when
the sample is run: This application uses CTL3D32.DLL,
which has not been correctly installed. After choosing OK to dismiss
the message box, the main dialog box of the sample is displayed but it uses a
white background and none of the dialog box controls will be 3-D.
You may receive a linker error of the type: error
LNK2001: unresolved external symbol _Ctl3dxxxxxxxx This means that
the Ctl3d32.lib file is not one of the library modules passed to the linker.
Specify this library in the "Object/library modules:" box on the Link property
page in the Project Settings dialog box.
Modification Type: | Major | Last Reviewed: | 4/29/2005 |
---|
Keywords: | kbdownload kberrmsg kbfile KB108433 kbAudDeveloper |
---|
|