Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Вниз

D5 vs D7, Threads, EThread Exception   Найти похожие ветки 

 
zapped   (2003-11-04 12:29) [0]

Люди, скажите! Может ли быть такое, что потоки на базе TThread в D5 и D7 отличаются по реализации?
а если короче, то код следующий

unit Unit2;

interface

uses
Classes;

type
TTestThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
public
constructor Create; reintroduce;
end;

implementation

{ TestThread }

constructor TTestThread.Create;
begin
FreeOnTerminate := true;
end;

procedure TTestThread.Execute;
begin
{ Place thread code here }
end;

end.


по нажатию кнопки делаем следующее

procedure TForm1.Button1Click(Sender: TObject);
begin
with TTestThread.Create do
WaitFor;
end;


Если компилировать в Д5, выполняется без ошибок. Если компилировать в D7, то при нажатии на педаль, выдаётся ошибка ThreadError: неверный дескриптор(6).
Почему так? Прошу не предлагать этот трабл обойти (я и сам вроде с усам), а почему ТАК?


 
han_malign   (2003-11-04 12:53) [1]

Как раз в D5 - выполянется с ошибкой - тебе не говорят, что ты лох...

inherited Create(false{или true}); - не судьба вызвать?


 
zapped   (2003-11-04 13:09) [2]

у меня - не выдаёт :)))
и да, прощу прощения :)))
забыл :))
constructor TTestThread.Create;
begin
inherited Create(true);
FreeOnTerminate := true;
Resume;
end;


всё равно, то же самое :)))


 
Erik   (2003-11-04 13:50) [3]

Напиши if not Suspended then WaitFor;


 
han_malign   (2003-11-04 13:53) [4]

procedure TTestThread.Execute;
begin
{ Place thread code here }
end;
..............
procedure TForm1.Button1Click(Sender: TObject);
begin
with TTestThread.Create do
WaitFor;
end;

- вообще говоря, ты вызываешь WaitFor у уже уничтоженного объекта(фактически он уничтожаeтся на Resume). AV не получается, только из-за того, что память, на самом деле, не освобождается, а просто помечается в Borland-овом диспетчере памяти как свободная, но Handle потока уже освобожден... А в D5, как раз, имел место глюк с FreeOnTerminate и Suspended, исправленный в дальнейшем.


 
panov   (2003-11-04 13:55) [5]

Неправильно используешь.

Правильный пример:

constructor TTestThread.Create;
begin
inherited Create(true);
FreeOnTerminate := False; //или вообще убираем строку
Resume;
end;


Теперь твой код будет работать на ура-):

procedure TForm1.Button1Click(Sender: TObject);
begin
with TTestThread.Create do
WaitFor;
Free;
end;


 
zapped   (2003-11-04 14:04) [6]

2 han_malign © (04.11.03 13:53) [4]
ага, пасиба...


 
zapped   (2003-11-04 14:17) [7]

2 panov © (04.11.03 13:55) [5]
я бы не сказал :)))
зачем оно тогда вообще есть, свойство FreeOnTerminate? :)))
хотя, надо признаться, что так работает корректно


 
han_malign   (2003-11-04 14:58) [8]

>зачем оно тогда вообще есть, свойство FreeOnTerminate?
- как раз, для того случая, когда не нужно следить за состоянием потока, и про него можно "забыть", зная что он сам освободит память... А если WaitFor, то это уже совсем другой случай.


 
zapped   (2003-11-04 16:41) [9]

2 han_malign © (04.11.03 14:58) [8]

> А если WaitFor, то это уже совсем другой случай.

Хммм... не знал, не думал, не гадал



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.038 c
4-42259
Dimich1978
2003-09-05 09:54
2003.11.13
Помогите скрыть меню при нажатии на кнопку ПУСК


3-41007
New user
2003-10-23 18:01
2003.11.13
Array fields in FireBird


3-40805
Илайдж
2003-10-22 12:13
2003.11.13
MSSQL2K: user-defined function


3-41097
MPS
2003-10-23 10:58
2003.11.13
Error: Fields XX not found


3-40877
BKGG
2003-10-21 09:27
2003.11.13
Можно ли как ни будь распознать какой базе принадлежить файл





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский