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

Приложение не отвечает. Закрыть?


Steepe_Hare

Вопрос

На Android-е мое приложение иногда делает определенную вычислительную работу и в этот момент не реагирует на нажатия. Application.ProcessMessages не помогает. Потом появляется это сообщение ("Приложение не отвечает. Закрыть?") Если подождать пока отработает, то всё возвращается в норму.

Слышал, что нужно вычисления выносить в поток TThread.

Но Бога ради, объясните тупому на простых примерах, как им пользоваться? Чувствую, что там хватает подводных камней и неожиданных результатов в вычислениях.

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

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

  • 0
10 минут назад, GASCHE сказал:

Все зависит от того что вы понимаете под словом работает, а так да работает никто и не спорит.

под работает я понимаю, что программа дожидается пяти нажатий кнопки, затем продолжает нижеследующий код. под Андроидом просто зависает и не реагирует на нажатия кнопки

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

под работает я понимаю, что программа дожидается пяти нажатий кнопки

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

Изменено пользователем GASCHE
Ссылка на комментарий
  • 0

вы не поверите, этот цикл УЖЕ встроен в программу (см. Application.Run) , и повторять его не надо.

и вам уже написали 2.5 раза, как нужно делать. Под windows, android, и вообще любую платформу

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

вы не поверите, этот цикл УЖЕ встроен в программу (см. Application.Run) , и повторять его не надо.

и вам уже написали 2.5 раза, как нужно делать. Под windows, android, и вообще любую платформу

Хорошо, посмотрите этот пример. Под Андроидом кнопка Stop не нажимается, а под Виндами она срабатывает и можно всё остановить.

Дайте, пожалуйста, пример для Андроида, который бы работал, как задумывается! (остановить итерацию) Спасибо!

Proj2.zip

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

вы вообще не читаете? этот пример от первого не отличается ничем.

у вас неправильный алгоритм. вы нарушаете главный цикл приложения. программа и так находится в большом цикле

while not terminated do begin processMessages  end;

и все события, которые возникают в программе и системе, обрабатываются именно там.

вы нажимаете кнопку - вам временно передается управление, чтобы выполнить обработчик кнопки. потом программа опять находится в ожидании событий, и при этом не жрет процессор как не в себя.

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

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

который бы работал, как задумывается!

Да чтоб понять как вы задумали надо обращаться к Кашпировскому.  Запускайте цикл

while not Cancelled do begin
   Inc(I);
end;

в потоке думаю это решит вашу проблему.
  


 


 

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

Да простят (или не простят) меня модераторы за ссылку на сторонний ресурс, но вот достаточно фундаментальный труд, который разжевывает всё по полочкам и не потерял ни грана актуальности с момента написания. Доступен даже (особенно) для тех, кто про потоки не слышал или "я знаю, что есть такое слово"

Изучать до просветления. И после прочтения - не стараться использовать потоки где попало. Ну, это придет с опытом.

Изменено пользователем kami
Ссылка на комментарий
  • 0
45 минут назад, Pax Beach сказал:

Блин, да сделайте уже парню готовый пример, и давайте закроем эту ветку , а то вы его, чувствую, скоро четвертуете )

Как-то так наверно.

 

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

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

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

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

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

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

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

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

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

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

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