我有一个 Windows 服务,它创建 10 个线程 + 一个创建任务列表的线程。
这 11 个线程中的每一个都通过调用 CoInitialize(nil) 进入 STA。
a) 其他线程可以使用其他线程创建的对象吗?
(这似乎有效,但是..)
b) 其他线程可以释放其他线程分配的内存吗?
(这似乎不起作用......)
我应该以某种方式编码线程之间的指针吗?
或者我是否应该至少获得该项目,对其进行处理,但让它成为创建它的线程的“所有者”?
但是,我对实际收集数据并在间隔内执行的线程有疑问。
当线程加载要处理的项目后,它进入休眠状态 5 分钟。
我怎样才能安全地终止这样的线程?如何中止 sleep 状态?
在此先感谢您的帮助!
最佳答案
您可能必须跨线程编码接口(interface)。 Here您可以找到一个 C++ 示例,同一篇文章展示了您可以使用的三种技术 (oMarshalInterThreadInterfaceInStream/CoMarshalInterface/Global Interface Table(GIT))。有关它们的更多信息,您可以在 MSDN 中找到。
要让线程等待但能够在 sleep 结束之前终止它,请使用具有适当超时值的 WaitForSingleObject() 以及要等待的 Windows 事件。当函数退出时,它会告诉它是否因为超时或事件已设置而退出。要在达到超时之前退出等待功能,只需设置事件。因此,您可以选择是进入另一个等待循环还是退出。
关于multithreading - 关于线程、COM+ 和 STA 单元的几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5288619/