【发布时间】:2011-03-19 11:33:16
【问题描述】:
当我发出 SOAP 请求时,我可以看到(在任务管理器中)我的应用程序的线程数从 1(主线程)增加到 8,这意味着 7 个额外的线程,这部分没问题,但是在从服务,线程数减少到 4(3 + 主线程)并保持这种状态,直到发出下一个请求。
由于我对 SOAP 不太满意并且没有过多地使用它,有谁知道这是否正常,或者我是否可以杀死/停止“挂起”的线程?
使用 Delphi 2010
附加信息:我正在线程中运行请求,是的,我在 Execute 方法中调用了“CoInitialize”和“CoUninitialize”。
测试应用:http://www.2shared.com/file/_dE4H-lO/soap_test_app.html
感谢大家的宝贵时间。
【问题讨论】:
-
您是否在您的应用程序中创建任何线程?我问的原因是,在线程中运行 SOAP 请求非常有用,因此它不会阻塞您的主应用程序。
-
@Chris 抱歉,出于某种奇怪的原因,我忘了提及这一点,是的,我正在线程中运行请求,并且正在动态创建对象并释放它们。
-
你能提供一点示例代码吗?这样,我们可以尝试重现您的案例并查看哪些胎面保持活动状态。顺便说一句:您可以使用Process Explorer 查看哪些线程处于活动状态。
-
所以作为一个基线,如果你要制作一个非常基本的肥皂项目,没有额外的线程......只需要一个带有 GO 按钮和一个状态标签的主窗体。当您单击 GO 时,它会发送 SOAP 请求,完成后,它会将标签更新为“done”。当您从 a) 表单打开、b) 单击开始、c) 收到 DONE 时,您对线程数有何观察?这将有助于将问题与一般的 SOAP 问题隔离开来,而不是您的代码存在问题。
-
我会说“管理器”线程或响应器线程被保留是很常见的。毕竟,您可能想要进行另一个 SOAP 调用,这样可以节省设置时间。我会查看库源代码,看看它实际上做了什么。这会告诉你到底发生了什么。