AutoThread Sample: Demonstrates the Use of CAtlAutoThreadModule

The AutoThread sample demonstrates using CAtlAutoThreadModule. The server is implemented in the Server.exe file. The module of the EXE is derived from CAtlAutoThreadModuleinstead of CAtlModule.

The AutoThread attributes sample is the attributed version of this sample.

Security noteSecurity Note

This sample code is intended to illustrate a concept, and it shows only the code that is relevant to that concept. It may not meet the security requirements for a specific environment, and it should not be used exactly as shown. We recommend that you add security and error-handling code to make your projects more secure and robust. Microsoft provides this sample code "AS IS" with no warranties.

To get samples and instructions for installing them:

To access samples from Visual Studio

  • On the Help menu, click Samples.

    By default, these samples are installed in drive:\Program Files\Microsoft Visual Studio 10.0\Samples\.

  • For the most recent version of this sample and a list of other samples, see Visual Studio Samples on the MSDN Web site.

Building and Running the Sample

To build and run this sample

  1. Open the solution file AutoThread.sln.

  2. From the Build menu, click Build Solution. This will build and register the client and the server.

  3. Start two instances of the ActiveX Control Test Container. See Testing Properties and Events with Test Container for information on how to access the test container.

  4. Insert one of the client controls (AutoCtl Class) into each of the test containers.

  5. Click one of the controls and notice that it takes one second for the server to return.

  6. Position and resize the test containers so that both of them are visible at the same time.

  7. Click one of the controls and then quickly click the other control. Notice that they finish waiting at approximately the same time. (If CAtlAutoThreadModule were not used, the first control would finish after one second, but the second control would not finish until a full second after the first control finished. The second call to sleep would not occur until the first had finished.) You can use the Delay(PropGet) and Delay(PropPut) methods to adjust the number of milliseconds the server sleeps for. If set properly, the second call to sleep may return before the first call to sleep.

How the Sample Works

The server interface has a single method: Sleep. This method puts the server thread to sleep for a given amount of time. The client portion of the sample is an ActiveX control that invokes the server's sleep method when the user clicks the control. The client also has a property named Delay that represents how long the server thread will sleep. The control displays the text "Ready" when it is waiting for a user click. The text "Waiting" is displayed when the control is waiting for the server to finish sleeping.


This sample uses the following keywords:

AtlGetObjectSourceInterface; BEGIN_SINK_MAP; CoCreateInstance; DECLARE_CLASSFACTORY_SINGLETON; IDispEventSimpleImpl::DispEventAdvise; END_SINK_MAP; IConnectionPointContainerImpl; IConnectionPointImpl; IDispEventImpl; OLE2CT; SINK_ENTRY_EX; SysAllocString; USES_CONVERSION; VARIANT; VariantClear; VariantCopy

See Also

Other Resources

ATL Samples