【发布时间】:2010-10-20 04:21:16
【问题描述】:
我使用的是 Delphi 2006 和 Indy 10。我创建了一个表单并下拉了一个 IdHttpServer 组件。我为表单创建了一个 OnCreate 事件以将服务器设置为活动状态,并为服务器的 OnCommandGet 输入这些行:
procedure TForm3.IdHTTPServerCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
Beep;
Sleep(10000);
AResponseInfo.ContentText := DateTimeToStr(Now);
end;
注意睡眠 10 秒。
然后我使用 Firefox 进行测试,使用 2 个浏览器。我有第一个连接到“本地主机”,我马上听到哔哔声。然后我切换到第二个浏览器,并让它连接到本地主机(在不到 10 秒的时间内),但它不会立即发出哔哔声。它等待第一个请求完成,然后发出哔哔声,再等待 10 秒。
我认为这些组件是多线程的?有没有我可以设置的属性让它按照我想象的方式运行(两个请求都会立即得到答复)。
【问题讨论】:
-
您可以通过为 ContentText 值返回 Format('%d %d', [MainThreadID, GetCurrentThreadID]) 来检查所有内容是否在同一个线程上运行。如果真的是多线程的,那么你在每个请求中得到的两个值会互不相同,而且两个响应的第二个值可能也会不同。
-
如果我可以让您对替代方案感兴趣:我已经开始 xxm.sourceforge.net 将我正在从事的项目开源,该项目可以解决这个问题和类似问题。我还没有在 Delphi 2006 上尝试过,它基于 Delphi 7,但运气好的话应该可以工作。
标签: multithreading delphi http indy