Delphi アプリを Indy 9 から Indy 10 に更新中です。
どうやら多くのことが変わったので、それはかなり痛いです。
私は一歩で立ち往生しています。
古いコードは次のとおりです (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クラスは Indy 10 でなくなりました。
代替品を探しましたが、TIdSchedulerOfThreadPoolが勝者のように見えますが、実行できません。
変更された (Indy 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;
ここでアクセス違反の例外が発生します (これは indy コードです):
procedure TIdTask.DoBeforeRun;
begin
FBeforeRunDone := True;
BeforeRun;
end;
FBeforeRunDone は nil です。