Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

плохой компонент [D7]


Страницы:   1 2

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] да, компонент юзает потоки :(


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо