Перейти к содержанию
Fire Monkey от А до Я
  • 0

TTask опасен (Android)


Major

Вопрос

Я в шоке.

Была работающая процедура, скажем, My_Procedure. Работала и под Windows, и под Android.

Просто поместил ее в TTask и повалились ошибки (под Андроидом) 

 TTask.Run(
    procedure
    begin
      My_Procedure;

      TThread.Synchronize(nil,
        procedure
        begin
          Button1.Enabled := True;
        end);
    end);
end;

 

Дебагер открывает

{$IFDEF POSIX}
function SysGetMem(Size: NativeInt): Pointer;
begin
  Result := __malloc(size);
end;

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
4 часа назад, kami сказал:

А там что? Обращение к визуальным компонентам?

Верно. Рисуются линии на канве TImage. Рисуются линии, потом делается Sleep, потом опять линии (своего рода анимация)

В задаче нельзя обращаться к визуальным компонентам?

Изменено пользователем Major
Ссылка на комментарий
  • 0
  • Модераторы
19 минут назад, Major сказал:

Верно. Рисуются линии на канве TImage. Рисуются линии, потом делается Sleep, потом опять линии (своего рода анимация)

В задаче нельзя обращаться к визуальным компонентам?

Правило: Обращение к любому визуальному компоненту в потоке только через

TThread.Synchronize
Ссылка на комментарий
  • 0

вообще имхо плохой вариант делать анимацию через поток и sleep

в данном случае я бы лучше наверное разделил анимацию на нужное кол-во ступеней и просто в таймере запускал их

смысл абсолютно тот же ибо доп. поток будет работать только на Sleep, все остальное все равно происходит в главном

Ссылка на комментарий
  • 0
3 часа назад, krapotkin сказал:

вообще имхо плохой вариант делать анимацию через поток и sleep

в данном случае я бы лучше наверное разделил анимацию на нужное кол-во ступеней и просто в таймере запускал их

смысл абсолютно тот же ибо доп. поток будет работать только на Sleep, все остальное все равно происходит в главном

спасибо, попробую

Ссылка на комментарий
  • -1
27 минут назад, Andrey Efimov сказал:

Правило: Обращение к любому визуальному компоненту в потоке только через


TThread.Synchronize

сделал так:

TTask.Run(
    procedure
    begin
      TThread.Synchronize(nil,
        procedure
        begin
          My_Procedure;
        end);

      TThread.Synchronize(nil,
        procedure
        begin
          Button1.Enabled := True;
        end);
    end);
end;

Ошибок run-time больше нет. А как обновить TImage после каждой прорисовки? У меня только конечный вариант показывает.

Причем под Windows TImage обновляется после каждой итерации, а под Android - показывается только заключательная картинка, а всё предыдущее время TImage стоит нетронутым.

Ссылка на комментарий
  • 0
  • Модераторы
11 минут назад, Major сказал:

сделал так

эм, зачем тут поток? вы понимаете хоть что написали?

Ссылка на комментарий
  • 0
3 часа назад, Равиль Зарипов (ZuBy) сказал:

эм, зачем тут поток? вы понимаете хоть что написали?

делал и без потока, но замораживалось приложение

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...