Tôi đang trong quá trình cập nhật một ứng dụng Delphi từ Indy 9 đến Indy 10Chuyển từ Indy 9-10 với Delphi, TIdSchedulerOfThreadPool khởi
Nó khá đau đớn, như có vẻ rất nhiều đã thay đổi.
Tôi bị kẹt ở một bước.
Đây là mã cũ (làm việc với Indy 9):
Một Pool Chủ đề được tạo ra và mỗi chủ đề của hồ bơi được khởi tạo và sau đó bắt đầu. Các chủ đề riêng lẻ tạo một máy khách http không hoạt động (nhưng nó không quan trọng ở đây).
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;
Các TIdThreadMgrPool lớp đã biến mất với Indy 10
Tôi đã nhìn cho một sự thay thế và TIdSchedulerOfThreadPool trông giống như một người chiến thắng, nhưng tôi không thể làm cho nó chạy.
Đây là sửa đổi (Indy 10) mã:
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;
tôi nhận được một ngoại lệ vi phạm truy cập ở đây (đây là mã indy):
procedure TIdTask.DoBeforeRun;
begin
FBeforeRunDone := True;
BeforeRun;
end;
FBeforeRunDone là con số không.