TThread в Линуксе

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

TThread в Линуксе

Сообщение serg_iv » 08.11.2006 21:11:41

Подскажите пожалуйста почему без всяких объявлений падает программа с использованием TThread в Линуксе?

при нажатии кнопки запуска еще одного потока
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin

  pot := Potok.Create(false);
 
end;

программа просто падает. (Хотя компилируется)

Дополнительный поток:

Код: Выделить всё
uses
  Classes, SysUtils;

type
 
Potok = class(TThread)
    protected
    procedure Execute; override;
    end;

implementation

uses unit1;

procedure Potok.Execute;
begin
  repeat
    sleep(10);
    inc(i);
  until Terminated;
end;

end.
serg_iv
постоялец
 
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Сообщение SergKam » 08.11.2006 22:25:41

во первых какая версия всего, операционка?
во вторых попробуй в папке lazarus/exaples/multitreading откомпелить и запустить пример. потом сообщи
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Сообщение serg_iv » 09.11.2006 08:29:02

Спасибо за то, что тыкнули меня носом в то, что лежит у меня под носом. Помогло.
Но тем не менее выше приведенный пример работает в Винде, а в Линуксе отказывается.
serg_iv
постоялец
 
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Сообщение SergKam » 09.11.2006 16:35:00

во первых какая версия всего, операционка?

а примеры в линуксе работают?
Я подоздеваю что ты в проекте не указал в
uses ctreads или ptreads
другая потенциальная проблема это sleep он завязан на сигналы
а это обычно проблнмы. попробуй для примера чтото другое
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Сообщение serg_iv » 09.11.2006 17:46:59

во первых какая версия всего, операционка?[

0.9.18, Mandriva 2007.

а примеры в линуксе работают?

Да.

Я подоздеваю что ты в проекте не указал в
uses ctreads или ptreads

вручную не указывал, если оно автоматом не прописывается, то точно нет.

другая потенциальная проблема это sleep он завязан на сигналы
а это обычно проблнмы. попробуй для примера чтото другое

Нужно отмерять короткие промежутки времени, не загружая систему, чем?
Желательно с точностью 2 миллисекунды.

[/quote]
serg_iv
постоялец
 
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Сообщение SergKam » 09.11.2006 22:52:57

скорее всего uses ctreads. смотри в примере(главный модуль проекта аля *.dpr)
>Нужно отмерять короткие промежутки времени, не загружая систему, чем?
если и впримере sleep работает тогда не в нем дело.(есть еще libc.usleep)
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Сообщение serg_iv » 10.11.2006 10:09:24

libc.usleep

в uses прописывается или отдельная библиотека?
serg_iv
постоялец
 
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Сообщение SergKam » 10.11.2006 12:31:51

в uses libc;
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Сообщение serg_iv » 12.11.2006 20:01:48

кстати про нерабочий пример, вот этот код стоит в головном модуле.
Код: Выделить всё
program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  {$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms
  { add your units here }, Unit1, unit2;
 


закоментировав вот так, пример удачно скомпилировался:
Код: Выделить всё
program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  //{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}//{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms
  { add your units here }, Unit1, unit2;


а вот что за директива {$IFDEF UseCThreads} не знаю.
Получилось, что методом научного тыка я ее отключил, а за что она отвечает так и не понял.
serg_iv
постоялец
 
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 80

Рейтинг@Mail.ru