0

オムニスレッドがタスクのスケジューリングを停止し、動作を停止するという奇妙なエラーが発生しています...

ここに私が持っているエラーを再現するためのコードがあります

Procedure PerformOperations(const task: IOmniTask);
Begin
  Sleep(1000);
End;

procedure TForm1.Button1Click(Sender: TObject);
Var I: Integer;
begin
  for I := 0 to 200 do
  CreateTask(PerformOperations).
            UnObserved.Schedule(ThreadPool);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ThreadPool := CreateThreadPool('ThreadPool');
  ThreadPool.MaxExecuting := 60;
  ThreadPool.MaxQueued := 0;
end;

ボタンをクリックすると200個のタスクが正常に作成されますが、タスクマネージャーからスレッド数を見ていると、その瞬間にボタン1をクリックするとスレッド数が減少し始めるとすぐに、スレッド数が突然0に減少し、その後、どのようにしてもタスクをスケジュールするためにボタン1を何度もクリックします。スレッドは作成されず、機能も実行されません。タスクをスケジュールするサーバーにデータを送信しているときに実際にこのエラーが発生しました。サーバーコード領域を分離できなかったため、ユーザー側で問題を生成するためのサンプルを書きました。この問題を解決する方法について誰か助けてもらえますか?

ありがとう

4

0 に答える 0