Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Embarcadero RAD Studio XE5-XE8,10.x(Seattle, Berl

Автор: zealotfan
Дата сообщения: 05.04.2016 13:36
Сделал свои System.Sensors и System.Android.Sensors. Если кому понадобится то вот ссылка http://www.danielespinetti.it/2016/01/using-locationsensor-on-android-service.html?utm_content=buffer687aa&utm_medium=social&utm_source=facebook.com&utm_campaign=buffer Всё подробно описано. Теперь вопрос почему во сне locationChange не срабатывает.
Автор: Frodo_Torbins
Дата сообщения: 05.04.2016 15:56
zealotfan
Во время сна Андроид останавливает все. Запретить ему усыплять ваше приложение можно wakelock-ом, но пользователи вас убьют, когда увидят как таит их батарейка. Лучше настроить периодическое срабатывание alarm-ма, они тоже могут ненадолго разбудить систему.
Автор: zealotfan
Дата сообщения: 05.04.2016 18:43
Frodo_Torbins
Понял! Пусть юзеры сами будят телефон Еще вопрос. Как сделать так чтобы при уходе в сон или переключении приложения на android моё приложение закрывалось. Сервис при это в любом случае будет работать
Автор: Frodo_Torbins
Дата сообщения: 06.04.2016 12:52
Андроидовский alarm никак не связан с действиями юзера, это системный объект, которым управляет приложение. Но если вас устроит ситуация, когда сервис будет останавливаться на длительные промежутки времени, то лучше так и оставить.
При переключении на другую апликацию Андроид может оставить вашу некоторое время работать, если ему сейчас не нужны ресурсы. Это делается чтобы ускорить старт приложения, если юзер захочет снова к нему вернутся. Вы можете отловить событие переключения на другую апликуху, и подчистить некоторые внутренние объекты, но полностью лучше не завершать работу. Чем более стандартным будет поведение вашего приложения, тем лучше.
Автор: zealotfan
Дата сообщения: 06.04.2016 13:59
Frodo_Torbins
Спасибо за советы. Будем испытывать в полевых условиях работу приложения и сервиса
Автор: zealotfan
Дата сообщения: 15.04.2016 11:54
Столкнулся с проблемой. Написал программу - клиент datasnap для android 4.2. У всех пользователей всё работало, но сегодня мне принесли планшет с android 5.0. Компилируется проект отлично,но при запуске выскакивает ошибка Aborted (6). Может кто сталкивался с данной проблемой?
Автор: Frodo_Torbins
Дата сообщения: 15.04.2016 16:34
zealotfan
В пятом Андроиде в очередной раз подтянули безопасность. В нем нельзя делать некоторые вещи, которые можно было делать в предыдущих версиях. Еще одно большое изменение - переход на ART.
Ну и обычные приколы с железом не забываем. Особенно нужно быть осторожным с Интеловскими Атомами, и любым китаем.
Автор: Ludens
Дата сообщения: 15.04.2016 19:26
Вопрос про работу со строками.
Как везде написано, сабжевый компилятор, если надо куда-то передать строку, не копирует ее физически, а передает только ссылку и обновляет некий счетчик обращений.
Допустим, у нас есть процедура, описанная как

Код: procedure Proc(const S: string);
Автор: abyss79
Дата сообщения: 15.04.2016 19:28
Ludens
Ссылка без права изменить: const S: string
Ссылка c правом изменить: var S: string
Копирование строки с правом редактирования копии: S: string
Автор: Enzaim
Дата сообщения: 15.04.2016 22:01
Ludens

Цитата:
Да или нет?

Сам код будет разным, но работать одинаково. В первом случае компилятор знает (модификатор const), что строка не будет изменена внутри процедуры, и поэтому не создаст внутренний блок try..except в котором будет выполняться тело процедуры, и не инкрементирует счётчик ссылок на строку при входе в процедуру, и не декрементирует его после выхода из процедуры.

Если эта процедура часто вызывается в коде, то разница в скорости будет более чем заметна.


Цитата:
procedure Proc(S: string);

В этом случае код будет таким:
1. Инкремент кол-ва ссылок на S;
2. Создание блока try..except и выполнение в нём тела Proc;
3. Декремент кол-ва ссылок на S;

abyss79
Как я понимаю, человек совсем другое спросил...
Автор: abyss79
Дата сообщения: 15.04.2016 22:23
Enzaim
За кодогенерацию не знаю и если создаётся try except, то это печально.
Но главное отличие const и его отсутствие в том, что без const создаётся новая переменная, куда копируется значение старой.
Это позволяет менять её локально без изменения старой, но бьёт по производительности.
Т.е. разница в работе кода более чем заметна и лучше прописывать const, когда это возможно.
Автор: Enzaim
Дата сообщения: 15.04.2016 23:02
abyss79

Цитата:
без const создаётся новая переменная, куда копируется значение старой.

Ет токмо на структурных типах так.
Автор: abyss79
Дата сообщения: 15.04.2016 23:12
Enzaim

procedure Proc(s: string);
begin
// на входе у нас s = 'string'
if s = 'string' then
// тут мы меняем значение
s := 'changed';
end;

s := 'string';
Proc(s);
В Proc же мы поменяли s, но тут s всё ещё равно 'string'.
Почему, если переменная не копируется в новую?

Добавлено:
Сам порылся ради интереса и нашёл что в целях оптимизации, копирование значения без const делается не автоматом, а в момент изменения. В целом логично и правильно.
Но производительности это не помогает, т.к. try finally + thread safe счетчик сильно снижает скорость.
У чувака аж до 66 раз разница в скорости на самопальных тестах:
http://stackoverflow.com/questions/5844904/is-the-use-of-const-dogmatic-or-rational/5845835#5845835
Т.е. в целом принципиально ничего не меняется, и копия создаётся, хоть и при необходимости, и скорость падает в любом случае.
Автор: Ludens
Дата сообщения: 16.04.2016 11:48
abyss79

Цитата:
Сам порылся ради интереса и нашёл

Огромное спасибо за ссылку! Фактически, там задан ровно мой вопрос и дан на него исчерпывающий ответ.
Автор: AlexCoRu
Дата сообщения: 16.04.2016 12:19
А, вообще-то, из каких соображений в паскале был принят именно такой тип строки? Что б быстрее вычислять её (строки) длину?

Добавлено:
Кстати, да, именно "вычислять". В Сях она "вычисляется", а в паскале "получается" после запоминания.
Автор: Ludens
Дата сообщения: 16.04.2016 12:46
abyss79
Вот только не понятно, почему компилятор не умеет оптимизировать эти вещи. Разве ему трудно проверить, изменяется ли значение строкового параметра внутри процедуры, и учесть это при создании кода?
Автор: AlexCoRu
Дата сообщения: 16.04.2016 12:48

Цитата:
Вот только не понятно, почему компилятор не умеет оптимизировать эти вещи.
Предложите алгоритм.

Добавлено:
Хотя, нет. Проблемы возникли после того как выяснилось, что строки могут быть не тольео ansi, а ещё и unicode.
Автор: abyss79
Дата сообщения: 16.04.2016 13:02
Ludens
Точно не знаю, но наверняка есть причины, типа передачи переменных в другие функции, неявные использования и прочее что мешает точно вычислять.
Я бы проблему решил проще, сделав по умолчанию поведение как при const, а если хочешь копию, то явно указывай новым ключевым словом.
Автор: ZloyBrawler
Дата сообщения: 16.04.2016 13:47
abyss79

Цитата:
сделав по умолчанию поведение как при const

на той же платформе .NET строки вообще не изменяемые и голову себе не забивают как эти строки передаются в качестве параметров
Автор: Frodo_Torbins
Дата сообщения: 16.04.2016 14:43

Цитата:
А, вообще-то, из каких соображений в паскале был принят именно такой тип строки? Что б быстрее вычислять её (строки) длину?

И это тоже, но главная причина - это защита от ошибок типа Переполнение буфера и Выход за границу буфера.
А счетчик ссылок - это чистая экономия памяти и времени на ее копирование. Хотя с приходом многоядерных процессоров работа со счетчиком перестала быть "бесплатной" как раньше.
Автор: Ludens
Дата сообщения: 16.04.2016 21:50
abyss79

Цитата:
Я бы проблему решил проще, сделав по умолчанию поведение как при const, а если хочешь копию, то явно указывай новым ключевым словом.

Лайк
Автор: Alexzzy
Дата сообщения: 16.04.2016 23:01

Цитата:

Цитата:
Я бы проблему решил проще, сделав по умолчанию поведение как при const, а если хочешь копию, то явно указывай новым ключевым словом.

Лайк

Эти из серии как VB6 обновили - старый код на свалку, все на .NET!
Автор: abyss79
Дата сообщения: 17.04.2016 00:19

Цитата:
Эти из серии как VB6 обновили - старый код на свалку, все на .NET!


Понятно что уже поздно и поломает всё, но это вполне себе решение.
Автор: MBo
Дата сообщения: 17.04.2016 07:48
Ludens
>Вопрос про работу со строками.

Хотя уже разобрались, но, думаю, не помешают ссылки на пару статей:

https://rsdn.ru/article/Delphi/dynarrays.xml
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1206
Автор: Alexzzy
Дата сообщения: 17.04.2016 14:03

Цитата:
Понятно что уже поздно и поломает всё

А когда было бы не поздно? До вторых Делфей строковый тип был только один, паскалевский (ShortString). Если что-то и решать, то на уровне директив компилятора.
Автор: abyss79
Дата сообщения: 17.04.2016 14:09

Цитата:
Если что-то и решать, то на уровне директив компилятора.

Будут проблемы со сторонними компонентами и библиотеками. Поезд ушел безвозвратно или получим Python 3, миграция на который годы идёт из-за подобных ломающих изменений.
Автор: VadimShvarts
Дата сообщения: 20.04.2016 16:17
All
D10.1 Distiller
Продолжение линейки XE Distiller для Delphi 10.1 Berlin

Исходники (Build 29),
исполняемый модуль (Build 29)

В меню Tools\Extras:
Добавлена опция "Don't create .stat files"

Также по прежнему можно убрать создание следующих файлов:
.local
.~bpl
.identcache

Автор: zealotfan
Дата сообщения: 21.04.2016 09:53
В DateTimePicker обрезается день даты. При изменении ширины DateTimePicker дата остаётся на месте т.к. выравнивание по левому краю и день как был обрезан так и есть. Как изменить выравнивание даты в DateTimePicker?
Автор: Ludens
Дата сообщения: 21.04.2016 10:31
VadimShvarts

Цитата:
Продолжение линейки XE Distiller для Delphi 10.1 Berlin

низкий поклон, великое дело продолжаешь!
Автор: AlexCoRu
Дата сообщения: 21.04.2016 21:13
VadimShvarts
Цитата:
Продолжение линейки XE Distiller для Delphi 10.1 Berlin
Спасибо, а отключение history можно сделать?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129

Предыдущая тема: Отмена встречи в Outlook из Excel VBA


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.