Пытаюсь скомпилировать программу написанную для 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.
Потоки(thread) в lazarus под ubuntu
Модератор: Модераторы
Уважаемый если честно читать код вообще не хочеться!
п.с. воспользуйтесь тегом [сode]...[/сode] и вам обязательно помогут!
п.с. воспользуйтесь тегом [сode]...[/сode] и вам обязательно помогут!
-
Egor Zvukov
- незнакомец
- Сообщения: 3
- Зарегистрирован: 08.12.2009 10:49:43
Ну вот. Думал, что мне это поможет... аннет! Зделал все, как описано, вот код:
При компиляции - ошибка на этой строчке:
следующего содержания: "Fatal: Syntax error, ";" expected but "identifier INTERFACES" found"
Что подскажете?
Код: Выделить всё
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"
Что подскажете?
Код: Выделить всё
{$DEFINE UNIX}
{$DEFINE UseCThreads}Зачем вы добавили эти дефайны?
Прочтите внимательно ошибку. У вас скорее всего не правильно построена конструкция.
И ещё такой вопрос под какие виджеты компилируете и под какие собран Lazarus?
-
Egor Zvukov
- незнакомец
- Сообщения: 3
- Зарегистрирован: 08.12.2009 10:49:43
Эти дефайны я добавил исходя из первого сообщения темы. У меня была та же проблема, что и у surface. Ему это помогло, мне, видимо, нет. Компилирую под GTK.
Добавлено спустя 16 минут 4 секунды:
К стати без этих дефайнов ошибка исчезает. Но мучает изначальная:
raised exception class 'runerror(232)'
при создании и запуске потока.
Помогите, кто-нибудь, а?
Добавлено спустя 16 минут 4 секунды:
К стати без этих дефайнов ошибка исчезает. Но мучает изначальная:
raised exception class 'runerror(232)'
при создании и запуске потока.
Помогите, кто-нибудь, а?
Ты дефайны добавил, а запятую после cthreads забыл поставить..
Внимательнее читаем чего пишет компилятор))
Внимательнее читаем чего пишет компилятор))
-
Egor Zvukov
- незнакомец
- Сообщения: 3
- Зарегистрирован: 08.12.2009 10:49:43
Надо же. Спасибо. Заработало. И потоки заработали. Замечательно!
