Specifying the Threading Model for a Project (ATL)


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


Guidelines for using


Define if all of your objects use the single threading model.


Define if one or more of your objects use apartment threading.


Define 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.