我在更新,從印第安納波利斯9 Delphi應用程序到印第安納波利斯10從印第安納波利斯9遷移到10德爾福,TIdSchedulerOfThreadPool初始化
這是很痛苦的過程,顯然發生了很多變化。
我被困在一個步驟。
這裏是舊代碼(有工作的Indy 9):
創建一個線程池,池中的每個線程進行初始化,然後啓動。 單個線程創建一個indy http客戶端(但這裏沒關係)。
TUrlThread = class(TIdThread)
...
var
i: Integer;
begin
// create the Pool and init it
Pool := TIdThreadMgrPool.Create(nil);
Pool.PoolSize := Options.RunningThreads;
Pool.ThreadClass:= TUrlThread;
// init threads and start them
for i := 1 to Options.RunningThreads do
begin
with (Pool.GetThread as TUrlThread) do
begin
Index := i;
Controler := Self;
Priority := Options.Priority;
Start;
end;
end;
的TIdThreadMgrPool類曠古印10
我已經找了一個替代和TIdSchedulerOfThreadPool看起來像一個勝利者, 但我不能讓它運行。
下面是修改(印第安納波利斯10)代碼:
TUrlThread = class(TIdThreadWithTask)
...
var
i: Integer;
begin
// create the Pool and init it
Pool := TIdSchedulerOfThreadPool.Create(nil);
Pool.PoolSize := Options.RunningThreads;
Pool.ThreadClass:= TUrlThread;
// init threads and start them
for i := 1 to Options.RunningThreads do
begin
with (Pool.NewThread as TUrlThread) do
begin
Index := i;
Controler := Self;
Priority := Options.Priority;
Start;
end;
end;
我這裏得到一個訪問衝突異常(這是印碼):
procedure TIdTask.DoBeforeRun;
begin
FBeforeRunDone := True;
BeforeRun;
end;
FBeforeRunDone爲零。