Проблема с методом Synchronize в классе-наследнике TThread
 Добавлено: 15.01.2014 17:15:04
Добавлено: 15.01.2014 17:15:04Добрый день.
Столкнулся с проблемой: не вызывается метод ссылка на который предается как параметр метода Synchronize.
Т.е. в procedure TLoadMapThread.Execute; вызывается Synchronize(@GenerateTexRoutine);
Но сам метод procedure TLoadMapThread.GenerateTexRoutine; не вызыватся (точка останова не срабатывает).
В чем может быть дело?
В другом маленьком проекте все работает.
На всякий случай весь модуль с потоком:
Добавлено спустя 4 минуты 44 секунды:
При этом тот же код откомпилированный в Delphi работает правильно, с заходом в метод GenerateTexRoutine.
И еще: строчка Synchronize({$IFDEF FPC}@{$ENDIF}GenerateTexRoutine); выполняется только один раз. Т.е. после выполнения этой строчки как будто исключение происходит, но никаких сообщений не выводится.
			Столкнулся с проблемой: не вызывается метод ссылка на который предается как параметр метода 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); выполняется только один раз. Т.е. после выполнения этой строчки как будто исключение происходит, но никаких сообщений не выводится.
 (Хотя в Delphi 2010 Synchronize работает и без форм).
 (Хотя в Delphi 2010 Synchronize работает и без форм).