Потоки(thread) в lazarus под ubuntu

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

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

Потоки(thread) в lazarus под ubuntu

Сообщение surface » 05.05.2009 21:34:10

Пытаюсь скомпилировать программу написанную для lazarus под windows в lazarus для linux.
И там имеются потоки.
Под win запускается все замечательно.
А вот под linux..
Вобщем имеется следующий код

type
TThread1 = class(TThread)
public
procedure Execute; override;

end;

var
Form1: TForm1;
thread1:tthread1;

implementation


{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
thread1:=tthread1.Create(false);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
thread1.Terminate;
end;

procedure TThread1.Execute;
begin
while not Terminated do
begin
integrate;
end;
end;

при нажатии на button1 -вызывается следующая ошибка..

project project1 raised exception class 'runerror(232)'

нашел вроде бы решение этой проблемы в
http://wiki.lazarus.freepascal.org/Laza ... _error_232

где говорится следующее

The complete error message is:

This binary has no thread support compiled in.
Recompile the application with a thread-driver in the program uses
clause before other units using thread.
Runtime error 232

Solution: Add cthreads as first unit to the uses clause of your main program, usually the .lpr-file.

Но это у меня уже было прописанно в файле lpr
я так понимаю вот так

program project1;

{$mode objfpc}{$H+}

uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms
{ you can add units after this }, Unit1, LResources, ComplexMathLibrary;

{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}

begin
{$I project1.lrs}
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

Может еще что-то надо ?

Добавлено спустя 39 минут 4 секунды:
к счатью решение тоже нашлось в lazarus bugtracker

вообщем в lpr нужно прописать еще 2 строчки:

{$DEFINE UNIX}
{$DEFINE UseCThreads}
-----------------------------------------------------------
program project1;

{$mode objfpc}{$H+}
{$DEFINE UNIX}
{$DEFINE UseCThreads}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms
{ you can add units after this }, Unit1, LResources, ComplexMathLibrary;

{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}

begin
{$I project1.lrs}
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
surface
незнакомец
 
Сообщения: 4
Зарегистрирован: 05.05.2009 14:25:14

Re: Потоки(thread) в lazarus под ubuntu

Сообщение Mr.Smart » 05.05.2009 23:19:34

Уважаемый если честно читать код вообще не хочеться!
п.с. воспользуйтесь тегом [сode]...[/сode] и вам обязательно помогут!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Потоки(thread) в lazarus под ubuntu

Сообщение Egor Zvukov » 08.12.2009 12:06:45

Ну вот. Думал, что мне это поможет... аннет! Зделал все, как описано, вот код:
Код: Выделить всё
program MyProgram;

{$mode objfpc}{$H+}
{$DEFINE UNIX}
{$DEFINE UseCThreads}
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms
  { you can add units after this }, uMain, LResources, lnetvisual, uServThread;

{$IFDEF WINDOWS}{$R red_pk_server.rc}{$ENDIF}

begin
  {$I red_pk_server.lrs}  Application.CreateForm(TfmMain, fmMain);
  Application.Run;
end.   


При компиляции - ошибка на этой строчке:

Код: Выделить всё
Interfaces, // this includes the LCL widgetset


следующего содержания: "Fatal: Syntax error, ";" expected but "identifier INTERFACES" found"
Что подскажете?
Egor Zvukov
незнакомец
 
Сообщения: 3
Зарегистрирован: 08.12.2009 11:49:43

Re: Потоки(thread) в lazarus под ubuntu

Сообщение Mr.Smart » 08.12.2009 12:14:20

Код: Выделить всё
{$DEFINE UNIX}
{$DEFINE UseCThreads}

Зачем вы добавили эти дефайны?

Прочтите внимательно ошибку. У вас скорее всего не правильно построена конструкция.
И ещё такой вопрос под какие виджеты компилируете и под какие собран Lazarus?
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Потоки(thread) в lazarus под ubuntu

Сообщение Egor Zvukov » 08.12.2009 12:41:06

Эти дефайны я добавил исходя из первого сообщения темы. У меня была та же проблема, что и у surface. Ему это помогло, мне, видимо, нет. Компилирую под GTK.

Добавлено спустя 16 минут 4 секунды:
К стати без этих дефайнов ошибка исчезает. Но мучает изначальная:
raised exception class 'runerror(232)'
при создании и запуске потока.

Помогите, кто-нибудь, а?
Egor Zvukov
незнакомец
 
Сообщения: 3
Зарегистрирован: 08.12.2009 11:49:43

Re: Потоки(thread) в lazarus под ubuntu

Сообщение FedeX » 08.12.2009 14:48:11

Ты дефайны добавил, а запятую после cthreads забыл поставить..
Внимательнее читаем чего пишет компилятор))
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Re: Потоки(thread) в lazarus под ubuntu

Сообщение Egor Zvukov » 08.12.2009 15:18:20

Надо же. Спасибо. Заработало. И потоки заработали. Замечательно!
Egor Zvukov
незнакомец
 
Сообщения: 3
Зарегистрирован: 08.12.2009 11:49:43


Вернуться в Lazarus

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

Сейчас этот форум просматривают: Google [Bot] и гости: 36

Рейтинг@Mail.ru