Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.29;
Скачать: CL | DM;

Вниз

thrddemo. Загадка.   Найти похожие ветки 

 
Verg ©   (2003-09-16 12:08) [0]

Delphi6. Установлены все известные UpdatePack-и и RtlUpdate.

NT4 WorkStation SP6a.
Находясь в Delphi беру этот самый thrddemo (..Borland\Delphi6\Demos\Threads\).

Делаю Build All и запуск (F9).

Появляется мордочка с тремя бщксами.


 
Verg ©   (2003-09-16 12:10) [1]

Пардон, промазал.

Так вот, жму кнопучку Start Sorting. Нормально. Сортирует.
Жму еще раз. Опять нормально. И так шесть раз. На шестом эта прога молча сваливает, прихватив с собой Delphi.

Это только у меня так?


 
mrcat ©   (2003-09-16 12:23) [2]

:) Неужели Борланд глюк допустил в thrddemo ? сильно сомневаюсь ...


 
Verg ©   (2003-09-16 12:30) [3]


> Неужели Борланд глюк допустил в thrddemo ? сильно сомневаюсь
> ...


Я не говорил про глюки в thrddemo.

Я хотел, чтобы у кого есть возможность проверить в этих же условиях - проверил.


 
mrcat ©   (2003-09-16 12:37) [4]

сейчас проверил на NT4 + SP6.
Дэлфи на ней нет, но программу запустил --- без ошибок.


 
Verg ©   (2003-09-16 12:40) [5]


> Дэлфи на ней нет, но программу запустил --- без ошибок


Без Delphi прога пашет - это я знаю. Именно эффект проявляется из под Делфи.


 
Bel ©   (2003-09-16 13:13) [6]

Во, блин. У меня то же самое. Win98, Delphi6 + UpdatePack2. На шестом проходе выдала "Программа DELPHI32 вызвала сбой при обращении к странице памяти в модуле KERNEL32.DLL по адресу 0187:bff87ee0". Чё за фигня такая?


 
Verg ©   (2003-09-16 13:33) [7]

На Win2K - проверил, нормально все.

Че за фигня не знаю.
Похоже что-то с отладчиком у дельфы.


 
MBo ©   (2003-09-16 13:51) [8]

Встречал в инете упоминания о том, что при запуске многопоточных приложений из-под среды бывают проблемы. Подробностей не помню, кажется, что-то с числом потоков связано. У меня D5, проблем с этой демкой нет, при отслеживании числа потоков - они завершаются корректно, уничтожаются вовремя.


 
Verg ©   (2003-09-16 14:03) [9]

Еще одно удивление:

procedure TForm1.Button1Click(Sender: TObject);
begin
TThread.Create(false);
end;


Что должно произойти при выполнении этого кода?


 
panov ©   (2003-09-16 14:07) [10]

>Verg ©
Создастся поток, который останется в незавершенном состоянии.


 
Polevi ©   (2003-09-16 14:16) [11]

>panov © (16.09.03 14:07) [10]
TThread абстрактный класс


 
MBo ©   (2003-09-16 14:30) [12]

>Verg © (16.09.03 14:03) [9]
Неужели в демке в Д6 такая логика?
В Д5

procedure TThreadSortForm.StartBtnClick(Sender: TObject);
...
with TBubbleSort.Create(BubbleSortBox, BubbleSortArray) do
OnTerminate := ThreadDone;
...

constructor TSortThread.Create(Box: TPaintBox; var SortArray: array of Integer);
begin
...
FreeOnTerminate := True;
inherited Create(False);
end;


 
Bel ©   (2003-09-16 14:49) [13]

> MBo © (16.09.03 14:30) [12]

В D6 то же самое.


 
Verg ©   (2003-09-16 15:01) [14]

Ладно, оставим в покое абстрактный класс TThread, который будет рожден и тихо мирно умрет:


if not Thread.Terminated then
try
Thread.Execute; // Вызов абстрактного метода приведет к исключению, которе для интересующихся будет лежать в FatalException
except
Thread.FFatalException := AcquireExceptionObject;
end;


Вот код, который под Delphi6 под NT4 вызывает аварийное завершение как самой программы, так и Delphi6-Pro:

procedure TForm1.Button1Click(Sender: TObject);
begin
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
end;


Как видим все дело просто в количестве потоков...


 
Verg ©   (2003-09-16 15:01) [15]

Ладно, оставим в покое абстрактный класс TThread, который будет рожден и тихо мирно умрет:


if not Thread.Terminated then
try
Thread.Execute; // Вызов абстрактного метода приведет к исключению, которе для интересующихся будет лежать в FatalException
except
Thread.FFatalException := AcquireExceptionObject;
end;


Вот код, который под Delphi6 под NT4 вызывает аварийное завершение как самой программы, так и Delphi6-Pro:

procedure TForm1.Button1Click(Sender: TObject);
begin
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
TThread.Create(false);
end;


Как видим все дело просто в количестве потоков...


 
MBo ©   (2003-09-17 07:56) [16]

http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=17644

Сейчас там вариант для d7, а когда было D6, в файле было написано:

Note :
This application use BPL runtime packages. The application
don"t work fine if you don"t use runtime BPLs. This is a
bug in Synchronize method of TThread, when running under Delphi IDE
IDE cannot run more than 16 threads at the same time



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

Текущий архив: 2003.09.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.034 c
14-96452
KSergey
2003-09-10 08:18
2003.09.29
Про мушкетеров


3-96062
Фикус
2003-09-10 13:31
2003.09.29
dbf -> interbase (2)


1-96297
npAKTuk
2003-09-16 14:24
2003.09.29
Расшифровка M3u


14-96419
ZeroDivide
2003-09-10 11:22
2003.09.29
Все. Бросаю курить. Прямо вот сейчас(11:22). Ни одной сигареты.


14-96442
SPeller
2003-09-11 16:25
2003.09.29
Как вам лето?