关于线程,COM +和STA公寓的几个问题

我有一个Windows服务,它创建10个线程+创建任务列表的线程。 这11个线程中的每一个都通过调用CoInitialize(nil)进入STA。 任务列表由一个线程创建,其他获取项目,处理它并免费.... a)其他线程可以使用其他线程创建的对象吗? (这似乎工作,但..) b)其他线程可以释放另一个线程分配的内存吗? (这似乎不起作用......) 我应该以某种方式封送线程之间的指针吗? 或者我应该至少获得该项目,处理它,但让它被释放是创建它的线程的“所有者”? 在我的Windows服务中,我创建了可用于启动/停止服务的功能(疑似并恢复线程)。 但是我遇到了实际收集数据并在间隔中执行的线程的问题。 当线程加载要处理的项目时,在它之后,它进入睡眠状态5分钟。 我怎样才能安全地终止这样的线程?如何中止睡眠状态? 在此先感谢您的帮助!     
已邀请:
您可能必须跨线程编组接口。在这里您可以找到一个C ++示例,相同的文章显示了您可以使用的三种技术(oMarshalInterThreadInterfaceInStream / CoMarshalInterface / Global Interface Table(GIT))。您可以在MSDN中找到有关它们的更多信息。 要让线程等待但能够在休眠结束之前终止它,请使用具有适当超时值的WaitForSingleObject(),例如等待的Windows事件。当函数退出时,它会告诉它是否已退出,因为已超时或事件已设置。要在达到超时之前退出等待功能,请设置事件。因此,您可以选择是否输入另一个等待循环或退出。     
要在STA线程之间编组STA对象指针,请使用
CoMarshallInterThreadInterfaceInStream
CoGetInterfaceAndReleaseStream
。 STA线程必须使用Windows消息来泵送消息,因为这是STA线程如何使用COM。即你必须调用GetMessage / TranslateMessage / DispatchMessage。可能您的框架有一个简单的消息泵功能,您可以使用它来执行此操作。 要中止5分钟的睡眠状态,请在较短的时间间隔内进行多次睡眠,并检查“shouldquit”标志。在Service Main中设置shouldquit标志。     

要回复问题请先登录注册