Столкнулся с проблемой: не вызывается метод ссылка на который предается как параметр метода Synchronize.
Т.е. в procedure TLoadMapThread.Execute; вызывается Synchronize(@GenerateTexRoutine);
Но сам метод procedure TLoadMapThread.GenerateTexRoutine; не вызыватся (точка останова не срабатывает).
В чем может быть дело?
В другом маленьком проекте все работает.
На всякий случай весь модуль с потоком:
- Код: Выделить всё
unit glMapLoadThread;
interface
uses
Classes, SysUtils;
type
TLoadMapThread = class(TThread)
private
x : integer;
protected
procedure Execute; override;
procedure GenerateTexRoutine;
public
FileName : string;
ThreadUpdateProgressExtProc, ThreadTerminatedExtProc : TNotifyEvent;
CurrProgress : byte;
SleepTime, MinSleepInterval, MinProgressBarInc : word;
LoadStartTime : TDateTime;
constructor Create(FileNamePrm : string; MapListPrm : Pointer);
end;
implementation
uses
Dialogs, Math;
constructor TLoadMapThread.Create(FileNamePrm : string; MapListPrm : Pointer);
begin
inherited Create(false{, FileNamePrm});
x := 0;
end;
procedure TLoadMapThread.Execute;
begin
while not(Terminated) and (x < 100) do
begin
sleep(10);
Synchronize({$IFDEF FPC}@{$ENDIF}GenerateTexRoutine);
end;
end;
procedure TLoadMapThread.GenerateTexRoutine;
begin
x := x + 1;
end;
end.
Добавлено спустя 4 минуты 44 секунды:
При этом тот же код откомпилированный в Delphi работает правильно, с заходом в метод GenerateTexRoutine.
И еще: строчка Synchronize({$IFDEF FPC}@{$ENDIF}GenerateTexRoutine); выполняется только один раз. Т.е. после выполнения этой строчки как будто исключение происходит, но никаких сообщений не выводится.