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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

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, 18:58 18-03-2022
xpin2013



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

Цитата:
Configuration and Deployment Guide for the Apache Cassandra* NoSQL Data Store on Intel® Architecture
 
 

 
--
даже с pdf-кой

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 11:40 13-07-2015
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
оО. эффектик, ну ладно. . .
 
Я собираюсь закрыть vdbi на сурсфорже. Хватит.

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 17:47 13-07-2015
dred2k



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

Цитата:
Я собираюсь закрыть vdbi на сурсфорже. Хватит.

Бросаешь или переезжаешь ?

Всего записей: 403 | Зарегистр. 15-02-2006 | Отправлено: 18:29 13-07-2015
xpin2013



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

Цитата:
Бросаешь или переезжаешь ?

Да мне удавиться что-ли за 30 серебренников? Вроде помолился встал.
 
Batareyki ne prilagayutsya [Batareyki v komplekt ne vkhodyat] (batteries not included).avi

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 19:58 13-07-2015
stanzdor



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
>> Я собираюсь закрыть vdbi  
 
а ты Yasuhiro Matsumoto? ))
о чем тут вообще разговор? эта инфа разве не 2013 года?

Всего записей: 588 | Зарегистр. 12-04-2004 | Отправлено: 22:59 14-07-2015
asutp2

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, а работал ли кто-нибудь с com-портами в OS X? В виндах с этим проблем нет, а вот с OS X пока не знаю, как подступиться

Всего записей: 785 | Зарегистр. 22-10-2004 | Отправлено: 20:37 24-07-2015
NeoAnomaly

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
asutp2, как вариант что то такое использовать http://www.winsoft.sk/xcomport.htm

Всего записей: 418 | Зарегистр. 23-03-2010 | Отправлено: 22:25 24-07-2015
Sulphide

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята может кто подскажет... Есть компонент, который грубо говоря работает с медиафайлами. у компонента есть ***.openfile('') и компонент многопоточный, внутри себя запускает ***.onpaintevent, когда очередной кадр готов, который в свою очередь в событии ***.onpaintevent обрабатываю я. Так вот, нажатия клавиш в OnFormKeyUp и других приводят к тому, что клавишное событие может приключиться именно посередине ***.onpaintevent, то есть во время рисования. А мне в клавишных событиях надо открывать очередной файл, либо делать вещи опять таки связанные с рисованием... Как тут быть? Как можно дождаться окончания ***.onpaintevent в любом другом событии, чтобы продолжить работу?

Всего записей: 277 | Зарегистр. 20-03-2008 | Отправлено: 13:59 05-08-2015
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sulphide
Можно добавить "текущее состояние" комопонента, а-ля аналог св-ва ComponentState и указывать там текущую операцию, а в обработчике OnFormKeyUp просто проверять состояние компонента. Если, например, в OnFormKeyUp можно будет проверить так:

Код:
if ComponentState.Painting in MyComp.State then
  Exit;

 
Тогда событие от клавы будет проигнорировано. Что, имхо, очень правильно.

Всего записей: 766 | Зарегистр. 18-05-2009 | Отправлено: 14:07 05-08-2015
ZloyBrawler



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Sulphide думаю что Eternal_Shield вам дельный совет дает.
Лучше дождаться завершения события не давая ход новым.
А если так нельзя, то ваш компонент открывающий медиафайлы и чего-то там рисующий, должен уметь работать асинхронно и иметь возможность прерывания операции, которую он выполняет в данный момент, чтобы можно было начать новую. При этом не нужно будет дожидаться ***.onpaintevent из-за того, что рисование прервано.
 
Конечно лучше бы вам тут подробнее описать чего вы программируете.
Еще один просмотрщик картинок?
Пока одна грузится и вывелась на половину стало ясно, что не та фотка или все понятно, что на ней и есть желание начать смотреть новую?
Тогда явно функция прерывания должна быть!
А иначе если нет прерывания, тогда запускается еще один поток открывания файла, а если очень быстро открывать файлы, тогда в памяти потоков будет дочерта открывающих фотки в никуда.

Всего записей: 514 | Зарегистр. 19-10-2010 | Отправлено: 15:19 05-08-2015
Sulphide

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

Цитата:
Тогда явно функция прерывания должна быть!  
А иначе если нет прерывания, тогда запускается еще один поток открывания файла, а если очень быстро открывать файлы, тогда в памяти потоков будет дочерта открывающих фотки в никуда.

Да именно так похоже и есть, кроме того компонент не успевает судя по всему освобождать ресурсы уже открытого файла если быстро нажимать клавиши. И до полутора гигов память приложения растет очень быстро. все было бы хорошо, если бы мне не надо было бы еще и opengl для рисования использовать... А то например событие от клавиатуры может прилететь где-то внутри glTexSubImage2D или ей подобных, которые грузят дынные из ram во vram. Или между glBegin() и glEnd() - вообще косяк.  
То что предлагал Eternal_Shield я делал, но в таком случае клавиши срабатывают через раз а то и через 2-3 раза - не комильфо К сожалению компонент платный, есть только bpl'ки, сильно тут не развернешься. Приложение - обычный видеоплеер, заточенный для моих личных нужд, ничего особенного. Есть плейлист, по которому перемещаюсь курсорными клавишами, при перемещении файл открывается и начинает воспроизводиться. делал тоже самое под fmx+opengl там вроде как такого кошмара не заметил (а может и внимания не обратил), сейчас захотелось однооконный интерфейс делаю на vcl..
ps даже не спрашивайте почему не чисто под fmx - пробовал - тормознее штуки я в своей жизни не видел. А мне еще и шейдеры надо использовать.
зы если кому интересно то это проект ffvcl на delphiffmpeg.ком

Всего записей: 277 | Зарегистр. 20-03-2008 | Отправлено: 15:43 05-08-2015 | Исправлено: Sulphide, 15:51 05-08-2015
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sulphide
То есть onpaintevent обрабатывается в одном потоке, а OnFormKeyUp в другом? Тогда однозначно надо делать синхронизацию. Тут либо OnFormKeyUp и onpaintevent будут использовать одну критическую секцию, либо OnFormKeyUp сам ничего делать не будет, а только будет добавлять события в очередь, которая обрабатывается внутри потока с onpaintevent.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 16:04 05-08-2015
ZloyBrawler



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Sulphide
Еще в годы институтские, друган из другого института подбрасывал задачки, сидели с ним кумекали как чего достичь, так там 3Д лабиринт делали, графическая часть на OpenGL не помню уже какие библиотеки юзали, а вот захват клавиатуры был посредством DX Input, реализовался уже иной библиотекой. Там и по лабиринту и бродить можно было и карта динамически отрисовывалась и некоторые сведения типа FPS...  
 
Там в проге в цикле отрисовки каждого кадра, постоянно опрашивались состояния нажатия клавиш на клавиатуре, там именно опрос того, что именно сейчас нажато, а не было когда-то. Вот вам бы это наверное подошло в той или иной реализации.
 
А вот что с картинками делать не знаю даже, по сути, если ресурсы не загружены, то их и выводить не нужно. А если загруженные ресурсы не нужны, то нужно очищать от них память полюбасам или по некой эвристике, типа частоты использования этих ресурсов и времени последнего использования, а так же оставшейся оперативной памяти ну или в целом ресурсов системы. Все от задач как понимаете плясать нужно.

Всего записей: 514 | Зарегистр. 19-10-2010 | Отправлено: 16:14 05-08-2015
Sulphide

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
В настройках компонента есть возможность работать со всеми его ивентами как в основном потоке программы, так и в других потоках. Но сути это по большому счету не меняет особо. если не сказать, что работа в одном потоке еще хуже в разных потоках еще как-то можно дождаться завершения ивента рисования. А в первом случае ивент рисования тупо прерывается ивентом от клавиатуры. Вот тоже думаю в сторону, что обработчик клавиатуры ничего не должен делать в таком случае, а как-то складывать нажатия в буфер, который будет обрабатываться в другом месте. Опять же не запихнешь его в ивент рисования...
ZloyBrawler ага, тоже уже думал по поводу отслеживания нажатий не через ивенты... но опять же остается косяк с кнопками на форме типа вперед, назад, пауза, плей и стоп короче все сводится к тому как бы покруче "обмануть" систему... если вы понимаете о чем я:D

Всего записей: 277 | Зарегистр. 20-03-2008 | Отправлено: 17:28 05-08-2015
Frodo_Torbins

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

Цитата:
А в первом случае ивент рисования тупо прерывается ивентом от клавиатуры.

Это что то новенькое. По крайней мере я не знаю способа прервать, из того же потока, работающий обработчик, если в нем нет обработки очереди сообщений (типа Application.ProcessMessages).

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 17:52 05-08-2015
ZloyBrawler



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Sulphide
Ностальгия посетила так сказать))) и сразу видно что с Русским языком тогда не сильно дружил "лабЕринт")) да и ща малость тоже))
http://imageshost.ru/photo/3748
http://imageshost.ru/photo/3749
http://imageshost.ru/photo/3750
http://imageshost.ru/photo/3751

Всего записей: 514 | Зарегистр. 19-10-2010 | Отправлено: 21:14 05-08-2015
Sulphide

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

Цитата:
Это что то новенькое. По крайней мере я не знаю способа прервать, из того же потока, работающий обработчик, если в нем нет обработки очереди сообщений (типа Application.ProcessMessages).

Да я вот тоже думал, что так и есть. Банально в начале отрисовки сделал скажем ImageReady := false, в конце ImageReady := true в итоге в части клавиатурных ивентов оказывается, что ImageReady все же false...
ZloyBrawler Круто!)

Всего записей: 277 | Зарегистр. 20-03-2008 | Отправлено: 21:41 05-08-2015
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sulphide
В таких случаях на стек вызовов смотреть надо. Наверняка где то в коде, который вы вызываете, есть обработка сообщений или каких-нибудь очередей.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 23:55 05-08-2015
Sulphide

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, решил все как раз проверкой ImageReady на false, просто при обработке клавиш и кнопок на форме отключаю ивент рисования, потом проверяю готова ли картинка и если не готова то делаю sleep(20), учитывая что у меня в среднем самый жирный кадр рисуется менее 10мс, в среднем видео 4k 3-7мс, то этого хватает, чтобы ивент рисования завершился, до того как мне надо будет производить мои действия, потом заново включаю ивент рисования компонента хотя не понимаю как ивент рисования, работающий в том же потоке, что и остальные ивенты может продолжаться?! Возможно, конечно, это происки wglDeleteContext или wglMakeCurrent :\ которые используются в рисовании и обработке клавиш...

Всего записей: 277 | Зарегистр. 20-03-2008 | Отправлено: 05:45 07-08-2015 | Исправлено: Sulphide, 05:51 07-08-2015
UniSoft



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

Цитата:
***.onpaintevent, когда очередной кадр готов, который в свою очередь в событии ***.onpaintevent обрабатываю я. Так вот, нажатия клавиш в OnFormKeyUp и других приводят к тому, что клавишное событие может приключиться именно посередине ***.onpaintevent, то есть во время рисования. А мне в клавишных событиях надо открывать очередной файл, либо делать вещи опять таки связанные с рисованием... Как тут быть? Как можно дождаться окончания ***.onpaintevent в любом другом событии, чтобы продолжить работу?

может просто обернуть все функции, которые не должны пересекаться в TCriticalSection?
тогда один поток просто приостановится, пока другой не освободит секцию.
(по крайней мере это лучше (и правильнее), чем sleep(20))
 

Цитата:
учитывая что у меня в среднем самый жирный кадр рисуется менее 10мс, в среднем видео 4k 3-7мс, то этого хватает, чтобы ивент рисования завершился

А на каком-нибудь ПК древнем, как мамонт, эти 10мс могут несколькоооооооооо затянуться...
 

Код:
 
TMyClass = class
private
  FCs: TCriticalSection;
  //...
end;
 
constructor TMyClass.Create;
begin
  inherited;
  FCs := TCriticalSection.Create;
end;
 
destructor TMyClass.Destroy;
begin
  FCs.Free;
  inherited;
end;
 
// ну и обернуть функции в  
 
FCs.Acquire; { lock out other threads }
try
  // do job
finally
  FCs.Release;
end;

 
И есть еще аналог... System.TMonitor
(похоже просто своя реализация той же CriticalSection)

Код:
 
FThreadLock: TObject;
{ constructor }
FThreadLock := TObject.Create;
{ destructor }
FThreadLock.Free;
 
  TMonitor.Enter(FThreadLock);
  try
    // do job
  finally
    TMonitor.Exit(FThreadLock);
  end;
 

Всего записей: 649 | Зарегистр. 22-12-2006 | Отправлено: 11:50 07-08-2015 | Исправлено: UniSoft, 12:34 07-08-2015
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

Компьютерный форум 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