线程处理注意事项

COM+ 排队组件记录器能够在进程的多线程单元 (MTA) 或单线程单元 (STA) 中运行。 在 STA 中运行记录器时,COM+ 要求包含对象的每个单元都必须有消息队列队列,才能处理来自同一进程中其他进程和单元的调用。 这意味着,线程的工作函数必须具有消息循环。 实例化排队组件时,返回的接口指针始终是代理接口指针,而不是直接接口指针。 指针实际上是对记录器实例的引用。 如果将此记录器接口引用传递到另一个线程,则原始线程仍必须在运行 Windows 消息循环,以便接收线程可以取消封送接口。 如果情况并非如此,接收线程在调用 CoUnmarshalInterface 时将挂起。

如果使用基元来同步线程,请考虑使用 MsgWaitForMultipleObjects,而不使用其他同步函数。 这将检查队列中的消息以及同步对象的状态。