Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Вниз

Уменьшение задержки   Найти похожие ветки 

 
andrew_john ©   (2005-06-26 22:07) [0]

Добрый... Возникла заморочка: программа обслуживания измерительного прибора написана на третьей Дельфи. Необходимо посылать импульсы на внешнее устройство, а потом прорисовывать точки на графике. (синхронно) Устанавливается на Первый Пень. Импульсы надо посылать с достаточно малой периодичностью. Возникает большая задержка по времени. Как можно ее уменьшить?

Спасибо!


 
Virgo_Style ©   (2005-06-26 23:07) [1]

Как Вы считаете, в Вашем вопросе содержится хоть что-то, исходя из чего можно было бы дать Вам какие-то рекомендации?

Пока что можно предложить
1. Заменить компьютер;
2. Заменить прибор;
3. Переписать программу.


 
Kerk ©   (2005-06-27 00:43) [2]

Virgo_Style ©   (26.06.05 23:07) [1]

Ну ты чего тупишь, а?
Ясно же, что ошибка в 17й строке!


 
Virgo_Style ©   (2005-06-27 09:04) [3]

Kerk ©   (27.06.05 0:43) [2]
Ну ты чего тупишь, а?
Ясно же, что ошибка в 17й строке!


см. п. 3 :-)


 
Kerk ©   (2005-06-27 09:09) [4]

Virgo_Style ©   (27.06.05 9:04) [3]
см. п. 3 :-)


Там слишком глобальный пункт.
Надо было: "переписать 17ю строку" :)


 
Thaddy   (2005-06-27 14:09) [5]

Your paint routines are not good enough.
1) Use clipping region,  and / or
2) prepare a polyline from buffer and draw it at once, i.e. store the pulses in an array of Tpoint, and when painting is needed, call polyline, adn /or
3) Use the API function to shift an image left and draw the next point in the empty space (forgot how it was called, come back to that, It does exist)

I would do either 1) or 2), with preference for 2) for scope


 
alpet ©   (2005-06-27 14:15) [6]

Положительный прирост иногда дает использование [b]GdiSetBatchLimit[/b]. Для большей производительности можно отсылать импульсы пачками, ибо Real-Time синхронности с графиком добиться в любом случае не удасться.


 
miek ©   (2005-06-27 20:56) [7]

несколько советов.
0) выяснить, _что именно_ тормозит - процедура снятия сигналов или отрисовка
1) не отрисовывать прямо на экране, а рисовать картинку в памяти, с помощью прямого доступа к памяти. желательно в 16-битном формате.
2) убрать все операции с длинными строками (можно заменить на ansistring)
3) убрать все выделения/освобождения памяти из критичного участка. резервировать всю необходимую память заранее.
4) если ничто не помогает, повысить приоритет потока программы до High. например, так: setprocesspriority (getcurrentprocess,  high_priority_class)


 
Fay ©   (2005-06-27 21:26) [8]

miek ©   (27.06.05 20:56) [7]
>> рисовать картинку в памяти, с помощью прямого доступа к памяти.
М.б. я очень тупой, но нельзя ли поподробнее про прямой доступ?

>> убрать все операции с длинными строками (можно заменить на ansistring)
Заменить длинные строки на длинные строки? Где и зачем?!

>> если ничто не помогает, повысить приоритет потока программы до High
это не решение, типа гранитного тампакса.


 
Маг Похмеляйнен   (2005-06-27 21:59) [9]

А что значит "с достаточно малой периодичностью" - сколько у вас это в цифрах?
Ловите ли ответ?


 
GrayFace ©   (2005-06-28 20:44) [10]

Fay ©   (27.06.05 21:26) [8]
М.б. я очень тупой, но нельзя ли поподробнее про прямой доступ?

TBitmap.Scanline
См. статью "Поставить точку... Быстрый доступ к пикселам TBitmap"


 
Thaddy   (2005-06-29 12:12) [11]

With very high periodicity from the signal, the screen has always insufficient resolution, so as I said: collect the points in a (poly)poly set of points, and only draw on certain intervals. This has the best results. I do this for waves and my in own scope control. His problem really is that he paints too much (every change)and pianting is slow (even if you use scanline or bitblt)
It is better to record every change and paint the polyline as requested by the system and on a fixed time using a timer. (And with the paint tips I mentioned)


 
-=S.S=- ©   (2005-06-30 11:18) [12]

Если необходимо иметь точность више чем 50 мс то под виндой не выйдет ... нужно писать под голый ДОС. Удачи


 
GrayFace ©   (2005-06-30 12:10) [13]

-=S.S=- ©   (30.06.05 11:18) [12]
Почему же?


 
GrayFace ©   (2005-07-02 20:21) [14]

Ой! Че это я такие глупые вопросы задаю! -=S.S=- ©   (30.06.05 11:18) [12] - это полная чушь! Кроме TTimer"а есть еще WaitableTimer и мультимедийный таймер (timeSetEvent).



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.036 c
3-1120997273
Aldor
2005-07-10 16:07
2005.08.21
Из двух полей в картеже должно быть использовано только одно.


3-1121244094
Ирина
2005-07-13 12:41
2005.08.21
Запись


4-1120018732
leonidus
2005-06-29 08:18
2005.08.21
Как отследить момент отпускания левой клавиши мыши?


1-1122550878
Priest
2005-07-28 15:41
2005.08.21
Как сменить фон для неактивного OLEConteiner


1-1122976324
Aleksandr.
2005-08-02 13:52
2005.08.21
Есть ли возможность проверить, перекрыт ли абстрактный метод?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский