
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.60] |
![]() |
|
![]() |
|
|
У меня следующая проблемма: При Destryct'е Потока у меня возникает следующая ошибка "Thread Error: Неверный дескриптор (6)". Думал что может он уже где-то выгружается - поставил Free вместо Destryct, результат тотже
![]() Кто сталкивался подскажите пожалуйста.. ЗЫ Вообще все работало, потом я добавил еще один поток, начала вылетать эта ошибка.. Я его удалил, а ошибка осталась.. |
Сообщ.
#2
,
|
|
|
А исходник можно, а то не очень понятно
|
Сообщ.
#3
,
|
|
|
Нашел в чем проблема..
Проблема была в том что у меня на потоке было установлено свойство FreeOnTerminate:=true; Получается когда переменная Terminate изменялась в true поток сам себя выгружал, а потом я его еще пытался вручную тушить.. ![]() ЗЫ Только почему-то раньше это работе не мешало.. что очень подозрительно... ![]() Добавлено Да и еще... теперь приложение нехило подвисает при остановке потока.. ![]() Код ксожелению выложить немогу т.к. там очень много всякого... выложу когда буду дома, щас некогда.. |
Сообщ.
#4
,
|
|
|
На роботу меня не взяли
![]() ![]() ![]() ........... type TSnThread = class(TThread) private Packet: array[0..500] of Byte; SPacket,CPacket: array[0..500] of Byte; SPOffset,CPOffset: Integer; protected procedure Execute; override; public Htt: String; end; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private FSnThread: TSnThread; end; ........... procedure TSnThread.Execute; begin try while not Terminated do begin //!!! ЗДЕСЬ Я ВСЕ ЗАКОНСПЕКТИРОВАЛ!! А Ошибка осталась.. end; finally {Здесь тоже} end; end; procedure TForm1.Button1Click(Sender: TObject); begin if FSnThread<>nil then begin FSnThread.Destroy; FSnThread:=nil; Button1.Caption:='Start'; end else begin FSnThread:=TSnThread.Create(True); FSnThread.Htt:='455'; FSnThread.SPOffset:=0; //ЕСЛИ СТРОЧКУ НИЖЕ убрать, все норм работает, только сильно подвисает при остановке потока (секунд на 10!!) FSnThread.FreeOnTerminate:=True; FSnThread.Resume; Button1.Caption:='Stop'; end; end; end. |
Сообщ.
#5
,
|
|
|
Цитата WiseFalcon @ try while not Terminated do begin //!!! ЗДЕСЬ Я ВСЕ ЗАКОНСПЕКТИРОВАЛ!! А Ошибка осталась.. end; finally {Здесь тоже} end; Однако здесь основной код, который смотреть надо. |
Сообщ.
#6
,
|
|
|
Цитата Демо @ здесь основной код, который смотреть надо В TSnThread.Execute находится причина подвисания при завершении. А уничтожать поток нужно так: ![]() ![]() if FSnThread <> nil then begin FSnThread.Terminate; FSnThread := nil; Button1.Caption := 'Start'; end else |