![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
плохой компонент [D7]
race1 © (2004-09-03 11:37:00)отчего дельфи может ругаться на мой компонент сообщением access violation ad address 000000 read of 000000. с виду, вроде, нормальный компонент, юзает потоки, всё должно быть ок. только нажимаю compile, сразу появляется сообщение, если компонент удалить с формы - компиляется нормально
даже если удалять компонент через Inastall packages иногда вылетает дельфя целиком...
race1 (2004-09-04 13:40:00) [1]>ну как минимум так ... ссылка-то на первый созданный трэд затирается ссылкой на следующий созданный трэд ! ..
не, такое нельзя
>это уж тебе решать ... может, страт трэда в любом режиме работы компонента чем-то оправдан у тебя ? .. я же не знаю .. потому и выразил сомнение ...
дело в том, что я не вижу причин почему бы компонент не компилялся, пусть он будет с потоками, пусть без. только что сделал новый компонент с нуля, там создаю два потока, потом переделал компонент, где отделял создание потока в десигн-тайме от ран-тайма (в десигн не создавал потоков), всё компилет без проблем. мой же компонент ну ни как не компилит :((
Digitman (2004-09-03 17:10:00) [2]
> т.е. брошено на форму два компонента?
ну как минимум так ... ссылка-то на первый созданный трэд затирается ссылкой на следующий созданный трэд ! ..
> да не знаю даже
странно это как-то .. ты сам не знаешь, какая функц-ть, в какой момент времени и в каких пределах от компонента требуется ?
> попробовать отделять, что ли, десигн от ран тайма
это уж тебе решать ... может, страт трэда в любом режиме работы компонента чем-то оправдан у тебя ? .. я же не знаю .. потому и выразил сомнение ...
race1 (2004-09-03 17:05:00) [3][18] т.е. брошено на форму два компонента?
[19] да не знаю даже :) попробовать отделять, что ли, десигн от ран тайма...
Digitman (2004-09-03 16:15:00) [4]
> race1
к тому же остается загадкой, за каким шутом требуется создавать трэд в дизайн-тайм ... ну в ран-тайм это еще можно как-то понять ..
Digitman (2004-09-03 16:13:00) [5]
> race1 (03.09.04 16:04) [17]
> внимательнее надо быть
хоть это напрямую к проблеме и не относится, но внимательнее-то нужно быть как раз тебе
вдумайся, а если более одного компонента будет создано ?
race1 (2004-09-03 16:04:00) [6][15]
...
end;
var
TFCom: TThreadForComponent;
implementation
...
внимательнее надо быть ;)
скорее всего это баги либо дельфи, либо мои. первое менее вероятно, вроде пустой компонент на пустой форме компиляет. нужно получше посмотреть свой компонент
Erik1 (2004-09-03 15:54:00) [7]Бред не бред, но сколько ты компонентов на форму бросаеш? И TFCom наверника глобальная переменая?
BillyJeans (2004-09-03 13:30:00) [8]а TFCom кто такой?
Семен Сорокин (2004-09-03 13:05:00) [9]бред какой-то, а кто убивать его (поток) будет? зачем глобальная переменная, когда можно ее в классе твоего компонента объявить?
ЗЫ.
Даже при такой реализации не должно быть AV.
race1 (2004-09-03 12:58:00) [10]да чего-то в d5 вроде работает... не поймёшь...
Digitman (2004-09-03 12:45:00) [11]т.е. я правильно понимаю, что если закомментарить строчку
TFCom := TThreadForComponent.Create(False);
то все проходит на ура ?
race1 (2004-09-03 12:39:00) [12]:) ну говрю же - всё пусто :)
unit Component1;
interface
uses
SysUtils, Classes, tfc;
type
TComponent1 = class(TComponent)
protected
constructor Create(AOwner: TComponent); override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TComponent1]);
end;
{ TComponent1 }
constructor TComponent1.Create(AOwner: TComponent);
begin
inherited;
TFCom := TThreadForComponent.Create(False);
end;
end.
unit tfc;
interface
uses
Classes;
type
TThreadForComponent = class(TThread)
protected
procedure Execute; override;
end;
var
TFCom: TThreadForComponent;
implementation
{ TThreadForComponent }
procedure TThreadForComponent.Execute;
begin
while not Terminated do
end;
end.
это дело кидаю на форму, компиляю, получаю ошибку
Amoeba (2004-09-03 12:37:00) [13]Код в студию!
race1 (2004-09-03 12:33:00) [14]вобщем, для проверки сделал новый компонент. в конструкторе создаю поток, где execute этого потока пустой цикл пока не terminated. такое дело поставил на форму, компиль - ошибка по адресу 0, чтение по адресу 0 :(
Семен Сорокин (2004-09-03 12:32:00) [15]race1 (03.09.04 12:22) [5]
А код компонента слабо привести?
Amoeba (2004-09-03 12:29:00) [16]Значит, у тебя ошибка в 17-й строке.
Digitman (2004-09-03 12:28:00) [17]
> это что же, нельзя написать многопточный компонент?
странные у тебя умозаключения.
искать следует не там где светло, а там где спрятано
с чего ты вообще к потокам прицепился-то ? может, проблема совсем в ином месте логики ?
race1 (2004-09-03 12:22:00) [18]оставил только создание потоков (suspensed = true), execute потоков тоже закомментировал, закомментировал разные методы самого компонента, всё равно при компиляции ругается тем же сообщением. это что же, нельзя написать многопточный компонент?
Digitman (2004-09-03 11:49:00) [19]
> что-то вроде кривых
да все что угодно может быть !
race1 (2004-09-03 11:47:00) [20][1] что-то вроде кривых конструкторов\деструкторов, прочих методов, обращающихся к несуществующим объектам?
[2] да, компонент юзает потоки :(