Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Embarcadero RAD Studio

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323

Открыть новую тему     Написать ответ в эту тему

V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
         
Обсуждаем новые возможности и баги
 
Просьба писать про Embarcadero RAD Studio XE5, XE6, XE7, XE8, 10.x (Seattle, Berlin,Tokyo)
  По вопросам скачивания - Тема в Варезнике (lite-версии тут)
  Вопросы по неюникодным версиям Delphi — шестая бумага
  Бесплатные Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus
  Коммерческие компоненты и утилиты для Delphi/BCB
  Вопросы по компонентам для Delphi, C++ Builder разных версий
  Новые языковые возможности, начиная с Delphi 2005 по XE4 — здесь, и New!здесь еще
  Англоязычный официальный форум Embarcadero — здесь
  Embarcadero Quality Central, веб интерфейс — здесь, новый Quality Portal тут
  Программирование на Delphi — викиверситет
  Другие ресурсы
   Предыдущие бумаги
 
     Вопросы ..XE4       Вопросы ..XE3    Вопросы ..XE2      
  Вопросы ..2009-XE    Вопросы ..<2009 / ч.5    Вопросы ..<2009 / ч.4      
  Вопросы ..<2009 / ч.3    Вопросы ..Delphi 2 / ч.2    Вопросы ..Delphi  

  Выключение встроенного эксперта Castalia  для XE8 (иногда помогает при вылетах и тормозах)  
  Полезные плагины(эксперты)

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 15:25 11-09-2013 | Исправлено: Komandor, 15:49 31-03-2024
zealotfan



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
Понял! Пусть юзеры сами будят телефон Еще вопрос. Как сделать так чтобы при уходе в сон или переключении приложения на android моё приложение закрывалось. Сервис при это в любом случае будет работать

Всего записей: 234 | Зарегистр. 25-02-2016 | Отправлено: 18:43 05-04-2016
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Андроидовский alarm никак не связан с действиями юзера, это системный объект, которым управляет приложение. Но если вас устроит ситуация, когда сервис будет останавливаться на длительные промежутки времени, то лучше так и оставить.
При переключении на другую апликацию Андроид может оставить вашу некоторое время работать, если ему сейчас не нужны ресурсы. Это делается чтобы ускорить старт приложения, если юзер захочет снова к нему вернутся. Вы можете отловить событие переключения на другую апликуху, и подчистить некоторые внутренние объекты, но полностью лучше не завершать работу. Чем более стандартным будет поведение вашего приложения, тем лучше.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 12:52 06-04-2016 | Исправлено: Frodo_Torbins, 12:53 06-04-2016
zealotfan



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
Спасибо за советы. Будем испытывать в полевых условиях работу приложения и сервиса

Всего записей: 234 | Зарегистр. 25-02-2016 | Отправлено: 13:59 06-04-2016 | Исправлено: zealotfan, 18:23 06-04-2016
zealotfan



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Столкнулся с проблемой. Написал программу - клиент datasnap для android 4.2. У всех пользователей всё работало, но сегодня мне принесли планшет с android 5.0. Компилируется проект отлично,но при запуске выскакивает ошибка Aborted (6). Может кто сталкивался с данной проблемой?

Всего записей: 234 | Зарегистр. 25-02-2016 | Отправлено: 11:54 15-04-2016
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zealotfan
В пятом Андроиде в очередной раз подтянули безопасность. В нем нельзя делать некоторые вещи, которые можно было делать в предыдущих версиях. Еще одно большое изменение - переход на ART.
Ну и обычные приколы с железом не забываем. Особенно нужно быть осторожным с Интеловскими Атомами, и любым китаем.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 16:34 15-04-2016
Ludens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос про работу со строками.
Как везде написано, сабжевый компилятор, если надо куда-то передать строку, не копирует ее физически, а передает только ссылку и обновляет некий счетчик обращений.
Допустим, у нас есть процедура, описанная как  

Код:
procedure Proc(const S: string);

Если эту процедуру, ничего в ней вообще не меняя, описать как

Код:
procedure Proc(S: string);

то даст ли это при компиляции другой результат? Казалось бы, если все равно передается только ссылка на строку, то результат компиляции должен быть одинаковым. Да или нет?

Всего записей: 1512 | Зарегистр. 16-01-2006 | Отправлено: 19:26 15-04-2016
abyss79

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ludens
Ссылка без права изменить: const S: string
Ссылка c правом изменить: var S: string
Копирование строки с правом редактирования копии: S: string

Всего записей: 77 | Зарегистр. 23-11-2007 | Отправлено: 19:28 15-04-2016 | Исправлено: abyss79, 19:42 15-04-2016
Enzaim



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ludens

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

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

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

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

Всего записей: 36 | Зарегистр. 21-09-2007 | Отправлено: 22:01 15-04-2016 | Исправлено: Enzaim, 22:08 15-04-2016
abyss79

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Enzaim
За кодогенерацию не знаю и если создаётся try except, то это печально.
Но главное отличие const и его отсутствие в том, что без const создаётся новая переменная, куда копируется значение старой.
Это позволяет менять её локально без изменения старой, но бьёт по производительности.
Т.е. разница в работе кода более чем заметна и лучше прописывать const, когда это возможно.

Всего записей: 77 | Зарегистр. 23-11-2007 | Отправлено: 22:23 15-04-2016
Enzaim



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
abyss79

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

Ет токмо на структурных типах так.

Всего записей: 36 | Зарегистр. 21-09-2007 | Отправлено: 23:02 15-04-2016
abyss79

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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
Т.е. в целом принципиально ничего не меняется, и копия создаётся, хоть и при необходимости, и скорость падает в любом случае.

Всего записей: 77 | Зарегистр. 23-11-2007 | Отправлено: 23:12 15-04-2016
Ludens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
abyss79

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

Огромное спасибо за ссылку! Фактически, там задан ровно мой вопрос и дан на него исчерпывающий ответ.

Всего записей: 1512 | Зарегистр. 16-01-2006 | Отправлено: 11:48 16-04-2016
AlexCoRu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А, вообще-то, из каких соображений в паскале был принят именно такой тип строки? Что б быстрее вычислять её (строки) длину?
 
Добавлено:
Кстати, да, именно "вычислять". В Сях она "вычисляется", а в паскале "получается" после запоминания.

Всего записей: 911 | Зарегистр. 04-09-2003 | Отправлено: 12:19 16-04-2016
Ludens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
abyss79
Вот только не понятно, почему компилятор не умеет оптимизировать эти вещи. Разве ему трудно проверить, изменяется ли значение строкового параметра внутри процедуры, и учесть это при создании кода?

Всего записей: 1512 | Зарегистр. 16-01-2006 | Отправлено: 12:46 16-04-2016
AlexCoRu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Вот только не понятно, почему компилятор не умеет оптимизировать эти вещи.
Предложите алгоритм.
 
Добавлено:
Хотя, нет. Проблемы возникли после того как выяснилось, что строки могут быть не тольео ansi, а ещё и unicode.

Всего записей: 911 | Зарегистр. 04-09-2003 | Отправлено: 12:48 16-04-2016
abyss79

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ludens
Точно не знаю, но наверняка есть причины, типа передачи переменных в другие функции, неявные использования и прочее что мешает точно вычислять.
Я бы проблему решил проще, сделав по умолчанию поведение как при const, а если хочешь копию, то явно указывай новым ключевым словом.

Всего записей: 77 | Зарегистр. 23-11-2007 | Отправлено: 13:02 16-04-2016
ZloyBrawler



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
abyss79

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

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

Всего записей: 514 | Зарегистр. 19-10-2010 | Отправлено: 13:47 16-04-2016
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

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

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 14:43 16-04-2016
Ludens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
abyss79

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

Лайк

Всего записей: 1512 | Зарегистр. 16-01-2006 | Отправлено: 21:50 16-04-2016
Alexzzy

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

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

Всего записей: 1474 | Зарегистр. 10-07-2013 | Отправлено: 23:01 16-04-2016
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Embarcadero RAD Studio


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru