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

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

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

ShIvADeSt (26-06-2017 02:39): Продолжение тут
http://forum.ru-board.com/topic.cgi?forum=33&topic=14667
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение раздела http://forum.ru-board.com/topic.cgi?forum=33&topic=6607&start=0  
Ссылки приветствуются.

См. также:

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 07:33 20-06-2007 | Исправлено: XPerformer, 14:41 24-10-2013
G787



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol
 
Да в принципе нужен кэширующий прокси и все    
 
Ну а если нужно сделать импорт в кэш не естественным путём то тут уже на смотреть и думать, у меня у самого такая идея раньше была но я от неё потом отказался ибо есть Sas.Планета которая опен сор и делает все что нужно и даже то что не нужно  
https://bitbucket.org/sas_team/
 
хотя конечно некоторых красивых рюшечек из WebGMaps  в сасе нету, но при желании можно самому прикрутить.

Всего записей: 1035 | Зарегистр. 04-12-2005 | Отправлено: 19:13 16-07-2013
deks



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TechnoDreamer
 
Что такое SAS.Планета?  
 
Добавлено:
Upd:
 
Да, уже увидел. но проблемы с лицензией у нее есть - иначе почему она не распространяется через AppStore?! Так что "для себя" можно и кэшировать. А в софт для AppStore лучше не добавлять такие возможности - или использовать OSM.
 
Нашел: _https://developers.google.com/maps/terms  
Пункт 10.1.3
 
То есть - тот, кто кэширует - несет определенные риски! За нарушение могут забанить ключи разработчика или доступа к сервису (и вообще - лучше на этом аккаунте разработчика ничего существенного не держать). Максимальные риски такие: если программа на продажу - запретят продавать и, возможно, будут взыскивать убытки.

Всего записей: 857 | Зарегистр. 09-10-2003 | Отправлено: 08:49 17-07-2013 | Исправлено: deks, 09:00 17-07-2013
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
TechnoDreamer
кеширует, но толку мне от сас - я ее в свой проект не включу
deks
OSM карты фигофые, для Украины самые точные карты или визикома или travelgps а уже топом навител.
А нет случайно или готовых компонентов или апишки для использования карт от вышеозначенных разработчиков???  
 
Добавлено:
G787
не увидел пост . если я правильно понял то можно сас прикрутить к своему проекту?

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 09:57 17-07-2013
deks



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol
 
Могу сказать только про земляков: _http://api.2gis.ru/about/enterprise/
 
Для наших краев у них карты хорошие. Но легально кэшировать можно только по договоренности - как написано в вышеуказанной ссылке. Иные способы кэширования и у них - вне лицензии.  
 
Про OSM - странно. Много где это хорошие карты! по крайней мере сетка дорог и тропинок у них оч хорошая для многих локаций. С номерами домов или places часто бывает беда, это точно.. Но карты - вообще довольно сложный вид деятельности! Вон, Apple даже это усвоила (mapgate - ios 6) ))

Всего записей: 857 | Зарегистр. 09-10-2003 | Отправлено: 18:55 17-07-2013
G787



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol
 
Лучше посмотри на сас в живую, там по сцылке есть и сорсы и бинарники.
Сас постоянно апдейтят и он поддерживает работу со множеством картографических сервисов, так что не одним гуглом богат будешь
 
Плюс из сас-а можно делать экспорт в R-maps которая под AdroЙед и которая тоже опен сорсовая
 
Вообщем велосипед уже готов, осталось только свои катафоты присобачить и можно ехать.  
 
зы: А всякими там страшилками для хомячков о лицензийности и прочей легальности нормальные люди давным давно подтираются

Всего записей: 1035 | Зарегистр. 04-12-2005 | Отправлено: 12:29 18-07-2013
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
G787
немного уже разобрался, но нет пакаджей для ХЕ4

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 12:54 18-07-2013
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите в чём может быть ошибка.
Создаётся поток и ожидается его завершение. Всё как-бы работает при простых вычислениях, допустим 2+2. Но при других операциях получения данных происходит зависание. Примерный код:
 
function Sum(NewParam1, NewParam2: Real): Real;
var DLLThread: TDLLThread;
begin
  Param1:= NewParam1;
  Param2:= NewParam2;
  DLLThread:= TDLLThread.Create(false);
  DLLThread.FreeOnTerminate:= true;
  DLLThread.Resume;
  while not DLLThread.Terminated do
    begin
      case WaitForSingleObject(DLLThread.Handle, INFINITE) of
        WAIT_FAILED: DLLThread.Terminate;
        WAIT_OBJECT_0: Result:= Rez;
      end;
    end;
end;
 
procedure TDLLThread.Execute;
begin
  inherited;
  Rez:= Param1+Param2;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var Val1,Val2, Rez: Real;
begin
  Val1:= StrToFloat(Edit2.Text);
  Val2:= StrToFloat(Edit2.Text);
  Rez:= Sum(Val1, Val2);
  Edit4.Text:= FloatToStr(Rez);
end;
 
Здесь всё работает, но если при работе с TidHTTP Indy в procedure TDLLThread.Execute поставить:
 
procedure TDLLThread.Execute;
begin
  inherited;
  ...
  idHTTP.Get(TIdURI.URLEncode(FURL), FIR.Stream);
  ...
end;
 
происходит зависание на idHTTP.Get
В чём может быть ошибка???
 
Спасибо.

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 10:19 19-07-2013
ulyss1977



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я бы включил «Debug DCUs» в настройках компилятора.
Тогда можно будет отлаживать исходники Indy и, возможно, проблема станет более ясной.

Всего записей: 30 | Зарегистр. 19-07-2005 | Отправлено: 10:37 19-07-2013
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ulyss1977
Да, я забыл упомянуть, проблема не в Indy. Если убрать ожидание завершения потока, то зависания в idHTTP.Get нет и всё работает. Какая-то неявная проблема в WaitForSingleObject... И не пойму почему код в принципе работает, но при смене характера действия в потоке всё стопорится.

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 10:48 19-07-2013
NickNNN



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

Цитата:
 DLLThread.FreeOnTerminate:= true;  

 
К делу не относится, но я бы эту строчку убрал. так как у Вас идут обращения к объекту, а он может быть уже освобожден

Всего записей: 156 | Зарегистр. 25-11-2008 | Отправлено: 17:00 19-07-2013
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NickNNN
Согласен, объект может быть уничтожен. Этот пример для отображения проблемы. В реальном коде идут куча проверок.

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 17:58 19-07-2013
ValidolX

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aleksandr N
в функции Sum() зачем поток я не понял
логика - создаем поток (suspended), запускаем (resume) и ждем вечно(!) когда от отработает
а где выигрыш от много поточности?
 2) поток используете не через WinAPI, а ждете на его завершение через WinAPI, както несиметрично
для вас есть вот такая функция -  
http://docwiki.embarcadero.com/Libraries/XE2/en/System.Classes.TThread.WaitFor
вобщем подумайте над концепцией - ибо ждать в главном потоке на рабочий поток ето..... то же самое что исполнить сумму в главном потоке (еще и побыстрее будеТ!)
 
вот хорошее описание потока VCL
http://www.realcoding.net/teach/Delphi7_prof/Glava29/Index6.html

Всего записей: 1719 | Зарегистр. 22-07-2001 | Отправлено: 18:53 19-07-2013 | Исправлено: ValidolX, 18:56 19-07-2013
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ValidolX
Самое главное в высказывании это зачем создавать отдельный поток, а затем ждать его завершения. Да, это не логично. Но для моей задачи это наиболее логично Здесь не идёт речи о выигрыше в многопоточности. Про потоки я немного в курсе. мне нужно как-то решить именно эту задачу. для моих потребностей это оптимально.

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 22:47 19-07-2013
ValidolX

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

Цитата:
Да, это не логично.  

с моей точки зрение (без обид) вы создаете сами себе проблемму
ведь выигриша нету никакого......
 
как б я делал
 
1) запустил поток с математиой или нетворкингом
2) когда потом сделает свое дело - пульнуть сообщение (Send/Post Message) в главный или другой поток с результатом - пускай разбираються
3) а вето время главный поток никого не ждет и дальше ждет мишку-клавиатурку юзверя )

Всего записей: 1719 | Зарегистр. 22-07-2001 | Отправлено: 23:06 19-07-2013
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ValidolX
Полностью согласен. Изначально всё так и было сделано. Но мне не нравится результат работы основного потока и вспомогательного. Пришёл к выводу что нужно именно подождать окончания работы вспомогательного потока. Нужно решить задачу ожидания потока. Лучше чтобы это было сделано именно так. как описано в примере.

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 01:06 20-07-2013
ValidolX

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aleksandr N
 
захотелось сделать пример взяв за базу ваш скетч
слушайте, уйма вопросов сразу возникла, разберем-с?
 
1) TDLLThread ето видимо ваш унаследованный класс от стандартного Дельфи класса TThread
a-la
type
  TDLLThread = class(TThread)
 
норма
 
2) function Sum(NewParam1, NewParam2: Real): Real;
я так вижу - глобальная функция
 
и вот ето
  Param1:= NewParam1;  
  Param2:= NewParam2;
 
тоже две глобальные переменные?
 
тут сразу вопрос! а что если будет больше одного потока считать вашу  сумму?
ой наверное будет... предлагаю перенести их в поля класса-ваешего-потока  
и проинициализировать после создания екземпляра обьекта класса потока
(свой метод или расширить конструктор)
 
3)
procedure TDLLThread.Execute;  
 begin  
   inherited;  
   Rez:= Param1+Param2;  
 end;
 
не пойму зачем inherited..... обьясните.....
 
Rez тоже переменная глобальная?  если да - см. проблему из п.2
(по хорошему поток должен информировать о результате своего мастера (как -решать вам)
 
4)
function Sum(NewParam1, NewParam2: Real): Real;
.......
 while not DLLThread.Terminated do
 
загадка!
 
Terminated - ето protected property, как вам удалось достучасться из глобальной функции.... неясно
 
из своего опыта -  
как правило подход типа
 
 while not Terminated do
ипсользуется в методе Execute вашего класса - потока
 
тоесть ктото извне (например из главного GUI потока может сказать вашему потоко-калькулятору - умирай!
тоесть вызвать метод Terminate()
он в свою очередь не убьет ваш поток а всего навсего поставит Terminated = true
и уже ваша ответственность проверять етот факт
 
5)
WaitForSingleObject(DLLThread.Handle, INFINITE) of
зачем такая сложная конструкция?
чтоб дождаться окончания потока надо использовать WaitFor() - метод класса-потока.
 
 
такие вот пока думки....
 
давайте делать (ах, какое модное слово) рефакторинг вашего кода
 
 
 
 

Всего записей: 1719 | Зарегистр. 22-07-2001 | Отправлено: 01:38 20-07-2013
G787



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol
Тут кстати zedxxx оказывается уже намутил кэширующий прокси правда из расчета на гугл эрс, но вроде как и для браузера тоже должон работать, в крайнем случае есть сорсы  
https://bitbucket.org/zedxxx/geocacher/src

Всего записей: 1035 | Зарегистр. 04-12-2005 | Отправлено: 03:31 20-07-2013
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемый ValidolX, вы слишком серьёзно отнеслись к тестовому примеру. Проблема заключалась только в ожидании завершения потока. Но WaitFor помогла. Об этом я что-то сразу не подумал. Зависание устранено.
Всем спасибо за помощь.

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 16:51 20-07-2013
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aleksandr N
Скорее всего WaitFor умеет обрабатывать оконные меседжи, а Инди их использует.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 23:55 20-07-2013
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
Да я ещё  перепроверю общую работу реальной функции. Пока всё устраивает. Но возможно просто буду использовать цикл пока не завершиться поток.

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 00:05 21-07-2013
   

Страницы: 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 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по компонентам для Delphi, C++ Builder разных версий
ShIvADeSt (26-06-2017 02:39): Продолжение тут
http://forum.ru-board.com/topic.cgi?forum=33&topic=14667


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru