Major Опубликовано 14 февраля, 2017 Поделиться Опубликовано 14 февраля, 2017 Я в шоке. Была работающая процедура, скажем, 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 kami Опубликовано 14 февраля, 2017 Поделиться Опубликовано 14 февраля, 2017 23 минуты назад, Major сказал: My_Procedure; А там что? Обращение к визуальным компонентам? Major 1 Цитата Ссылка на комментарий
0 krapotkin Опубликовано 14 февраля, 2017 Поделиться Опубликовано 14 февраля, 2017 вот да Цитата Ссылка на комментарий
0 Major Опубликовано 14 февраля, 2017 Автор Поделиться Опубликовано 14 февраля, 2017 (изменено) 4 часа назад, kami сказал: А там что? Обращение к визуальным компонентам? Верно. Рисуются линии на канве TImage. Рисуются линии, потом делается Sleep, потом опять линии (своего рода анимация) В задаче нельзя обращаться к визуальным компонентам? Изменено 14 февраля, 2017 пользователем Major Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 14 февраля, 2017 Модераторы Поделиться Опубликовано 14 февраля, 2017 19 минут назад, Major сказал: Верно. Рисуются линии на канве TImage. Рисуются линии, потом делается Sleep, потом опять линии (своего рода анимация) В задаче нельзя обращаться к визуальным компонентам? Правило: Обращение к любому визуальному компоненту в потоке только через TThread.Synchronize Major 1 Цитата Ссылка на комментарий
0 krapotkin Опубликовано 14 февраля, 2017 Поделиться Опубликовано 14 февраля, 2017 вообще имхо плохой вариант делать анимацию через поток и sleep в данном случае я бы лучше наверное разделил анимацию на нужное кол-во ступеней и просто в таймере запускал их смысл абсолютно тот же ибо доп. поток будет работать только на Sleep, все остальное все равно происходит в главном Andrey Efimov и Major 2 Цитата Ссылка на комментарий
0 Major Опубликовано 14 февраля, 2017 Автор Поделиться Опубликовано 14 февраля, 2017 3 часа назад, krapotkin сказал: вообще имхо плохой вариант делать анимацию через поток и sleep в данном случае я бы лучше наверное разделил анимацию на нужное кол-во ступеней и просто в таймере запускал их смысл абсолютно тот же ибо доп. поток будет работать только на Sleep, все остальное все равно происходит в главном спасибо, попробую Цитата Ссылка на комментарий
-1 Major Опубликовано 14 февраля, 2017 Автор Поделиться Опубликовано 14 февраля, 2017 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 Модераторы Равиль Зарипов (ZuBy) Опубликовано 14 февраля, 2017 Модераторы Поделиться Опубликовано 14 февраля, 2017 11 минут назад, Major сказал: сделал так эм, зачем тут поток? вы понимаете хоть что написали? Цитата Ссылка на комментарий
0 Major Опубликовано 14 февраля, 2017 Автор Поделиться Опубликовано 14 февраля, 2017 3 часа назад, Равиль Зарипов (ZuBy) сказал: эм, зачем тут поток? вы понимаете хоть что написали? делал и без потока, но замораживалось приложение Цитата Ссылка на комментарий
0 krapotkin Опубликовано 14 февраля, 2017 Поделиться Опубликовано 14 февраля, 2017 а сейчас тут в точности написано следующее My_Procedure; Button1.Enabled := True; Равиль Зарипов (ZuBy) и Andrey Efimov 2 Цитата Ссылка на комментарий
0 Rusland Опубликовано 15 февраля, 2017 Поделиться Опубликовано 15 февраля, 2017 Major, внутри My_Procedure делайте Synchronize только при обращении к визуальным компонентам. Покажите процедуру My_Procedure Цитата Ссылка на комментарий
Вопрос
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;
Ссылка на комментарий
11 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.