IPB
ЛогинПароль:

> 

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Класс Thread
сообщение
Сообщение #1


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Компилирую программу:

program testthreads;

{$mode objfpc}

uses
sysutils,
classes;

type
TMyThread=class(TThread)
private
ch : char;
protected
procedure Execute; override;
public
constructor Create(c:char);
end;

procedure TMyThread.Execute;
begin
repeat
write(ch);
until Terminated;
end;


constructor TMyThread.Create(c:char);
begin
ch:=c;
inherited Create(false);
end;

var
t1,t2 : TMyThread;
begin
t1:=TMyThread.Create('a');
t2:=TMyThread.Create('b');
readln;
t2.Terminate;
readln;
t1.Terminate;
readln;
t2.Destroy;
t1.Destroy;
end.


При запуске секунды 3-4 работает как надо, потом ошибка
Error, DISC FULL
И вылетает.
Компилятор FPC.

То-же самое делаю на Delphi, все идеально!

+ в FPC когда прога еще работает, если нажать на клавишу, то прога вылетит. sad.gif

почему?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Все, модернизировал пример, он работает.
Идея : проверять произошла ли ошика, если произошла, то процесс автоматически остановиться, а мы его заново создадим.
uses
 sysutils,
 classes,windows,wincrt;
var b:byte;
{$mode objfpc}
type
 TMyThread=class(TThread)
 private
   ch : char;
 protected

procedure Execute; override;
 public
   constructor Create(c:char);

 end;

procedure TMyThread.Execute;
begin
 repeat
   {$I-} write(ch);{$I+}
   If Ioresult<> 0 then  begin   inherited Create(false);end
 until Terminated;
end;


constructor TMyThread.Create(c:char);
begin
 ch:=c;
 inherited Create(false);
end;

var
 t1,t2 : TMyThread;
begin
 b:=1;
 t1:=TMyThread.Create('a');
 t2:=TMyThread.Create('b');

 readln;
 t2.Terminate;
 readln;
 t1.Terminate;
 readln;
 t2.Destroy;
 t1.Destroy;
end.


Работает как часы хоть сутки. Обработка ReadLn тоже работает!!!!


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.05.2024 13:15
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name