Aleksandr N
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Подскажите в чём может быть ошибка. Создаётся поток и ожидается его завершение. Всё как-бы работает при простых вычислениях, допустим 2+2. Но при других операциях получения данных происходит зависание. Примерный код: function Sum(NewParam1, NewParam2: Real): Real; var DLLThread: TDLLThread; begin Param1:= NewParam1; Param2:= NewParam2; DLLThread:= TDLLThread.Create(false); DLLThread.FreeOnTerminate:= true; DLLThread.Resume; while not DLLThread.Terminated do begin case WaitForSingleObject(DLLThread.Handle, INFINITE) of WAIT_FAILED: DLLThread.Terminate; WAIT_OBJECT_0: Result:= Rez; end; end; end; procedure TDLLThread.Execute; begin inherited; Rez:= Param1+Param2; end; procedure TForm1.Button2Click(Sender: TObject); var Val1,Val2, Rez: Real; begin Val1:= StrToFloat(Edit2.Text); Val2:= StrToFloat(Edit2.Text); Rez:= Sum(Val1, Val2); Edit4.Text:= FloatToStr(Rez); end; Здесь всё работает, но если при работе с TidHTTP Indy в procedure TDLLThread.Execute поставить: procedure TDLLThread.Execute; begin inherited; ... idHTTP.Get(TIdURI.URLEncode(FURL), FIR.Stream); ... end; происходит зависание на idHTTP.Get В чём может быть ошибка??? Спасибо. |