Specifying the Threading Model for a Project (ATL)


For the latest documentation on Visual Studio 2017 RC, see Visual Studio 2017 RC Documentation.

The following macros are available to specify the threading model of an ATL project:

MacroGuidelines for using
_ATL_SINGLE_THREADEDDefine if all of your objects use the single threading model.
_ATL_APARTMENT_THREADEDDefine if one or more of your objects use apartment threading.
_ATL_FREE_THREADEDDefine if one or more of your objects use free or neutral threading. Existing code may contain references to the equivalent macro _ATL_MULTI_THREADED.

If you do not define any of these macros for your project, _ATL_FREE_THREADED will be in effect.

The macros affect run-time performance as follows:

  • Specifying the macro that corresponds to the objects in your project can improve run-time performance.

  • Specifying a higher level of macro, for example if you specify _ATL_APARTMENT_THREADED when all of your objects are single threaded, will slightly degrade run-time performance.

  • Specifying a lower level of macro, for example, if you specify _ATL_SINGLE_THREADED when one or more of your objects use apartment threading or free threading, can cause your application to fail at run time.

See Options, ATL Simple Object Wizard for a description of the threading models available for an ATL object.