Многопоточные приложения и связанное с ними в Linux, MacOS

Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.

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

Linus
новенький
Сообщения: 47
Зарегистрирован: 11.01.2013 22:01:28

Сообщение Linus »

Upd.Upd.
Вообще, тут надо просто отладить, непонятно на каком шаге AV возникает, что при этом в логах, что делает в это время поток который должен разбудиться.

Вангую, что в

Код: Выделить всё

FScheduler^.Suspended
идет попытка разыменовать невалидный указатель. Вообще, непонятно зачем здесь использовать указатель на класс, ведь он сам и есть указатель. Тогда уж проверку выше на nil надо не только FSheduler, а еще и FSheduler^ ставить.

Это нужно обязательно проверить
[Дополнение]
Действительно, на такую мелочь и внимания не обращал. Все заработало.

плюс код присваивания FSheduler

Код: Выделить всё

procedure TTaskScheduler.CreateTaskThread(TaskItem:TTaskItemPTR; AwakeMe:boolean); //not tested
var
   NewTask:TTaskThread;
   Delay:Longint;
begin
  NewTask:=TTaskThread.Create(true);
  NewTask.FreeOnTerminate:=FALSE;
  NewTask.AwakeScheduler:=AwakeMe;
  NewTask.TaskItem:=TaskItem;
  NewTask.FScheduler:=@Self;  //<-
....
  NewTask.Delay:=Delay;
  NewTask.Start;


Всем спасибо. :D
Ответить