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

Вниз

правильная передача параметров в процедуру   Найти похожие ветки 

 
novichek   (2012-04-07 20:10) [0]

допустим мне необходимо передать в процедуру битмап, на котором она отрисует что-то.
как правильно описать процедуру?

procedure test(bmp: TBitmap);

или правильнее типа указатель передавать

procedure test(bmp: ^TBitmap);

или нет разницы?


 
MBo ©   (2012-04-07 20:16) [1]

TBitmap и так указатель, так что первый способ подойдёт


 
novichek   (2012-04-07 20:30) [2]

Понял, Спасибо!
Подскажите пожалуйста как вы вылавливаете ошибки?
есть ли какой предпочтительный софт?

у меня создается поток один раз. в отдельном uses находятся процедурки, которые рисуют на битмапе. вызываются с данного потока.
не могу понять откуда двойные отрисовки.

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


 
novichek   (2012-04-07 20:41) [3]

помнится как то проверял утечку памяти.
не могу вспомнить и всё.
не подскажите методы?
вроде бы в uses какой модуль прописывал.


 
sniknik ©   (2012-04-07 20:56) [4]

> Подскажите пожалуйста как вы вылавливаете ошибки?
не делаем их... смотрим в доке как нужно работать с тем, что тебе нужно, и следуем рекомендациям...
ну типа того. еще базовые знания, правила, опыт... на то как делать нельзя.

вот например

> у меня создается поток один раз. в отдельном uses находятся процедурки, которые рисуют на битмапе. вызываются с данного потока.
вообще то отрисовка(интерфейсная часть, ввод вывод по правилам/логике VCL делается в основном потоке, в дополнительных вся другая работа.
т.е. тут у тебя уже глюк. в логике. неважно, что ты написал собственно в коде. и неважно, что "это же работает!" прямо сейчас, у тебя на компе, "выстрелить" может где и как угодно.

>  не могу понять откуда двойные отрисовки.
не самая большая проблема при такой кривой логике...

> не могу вспомнить и всё.
FastMM, смотрим доку.


 
novichek   (2012-04-07 22:28) [5]

>> т.е. тут у тебя уже глюк.

где-то я понимаю это.
вот описал я поток в uses"е.
дохрена вышло кода.
для удобства в другом модуле описал работу с битмапом.
ну и вызываю этот код с потока.
если всё это слепить для потока в одном uses то запутаться можно в 50 страниц кода.
второй момент хочу потом вынести отрисовку на уровне плагинов в виде dll
как тут тогда будеь решаться эта проблема? не будет же создаваться dll для каждого потока... один код будут использовать разные потоки.
в чем тут разница если я в отдельный uses вынес?
данный uses использует только поток.


 
sniknik ©   (2012-04-07 23:11) [6]

> где-то я понимаю это.
ни фига ты не понимаешь. раз начинаешь опять бубнить про потоки, и отрисовке с них ...  "на уровне плагинов в виде dll". а это кстати, уже лирика только для запутывания, и отвлечения внимания. без разницы что и откуда.

ты спросил, тебе ответили -есть правило, интерфейсом/отрисовкой занимается основной поток. все, точка.
не хочешь следовать?/переделывать прогу... твои проблемы. не парь мозг нам.

> для удобства в другом модуле описал работу с битмапом.
"работу", можешь описывать где угодно, и выполнять ее где угодно/с чем угодно, битмапом/бабушкой/т.д., хоть в "облаках мелкософта", не то что в потоках. а отображать НЕЛЬЗЯ.

> в чем тут разница если я в отдельный uses вынес?
тебе что объясняй, что нет, следом идет та же чушь с полным игнором/не чтением объяснений.  
в чем разница если ответов тебе не будет?


 
Юрий Зотов ©   (2012-04-07 23:34) [7]


> novichek   (07.04.12 22:28) [5]

Вот здесь:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1411
можете посмотреть пример отрисовки в потоке кодом из DLL.

Но проще сделать так, как говорит sniknik: отрисовкой занимается главный поток. При этом без разницы, где находится рисующий код - в потоке или в DLL.


 
novichek   (2012-04-08 00:17) [8]

sniknik ©, может вы меня не так поняли? или я туплю все же?

я нигде не писал, что поток отрисовывает на канве VCL.

в потоке по кругу на собственных двух битмапах орисовывается графика при помощи дополнительных модулей.
далее при запросе приложения, в моём случаи при смене видеокадра запрос идет в поток, который возвращает указатель на отрисованный битмап который прога и рендерит уже поверх.

моя проблема оказалась в том, что я в потоке очищаю битмап типа bmp1.Canvas.FillRect(bmp1.Canvas.ClipRect); и передаю его уже в доп. модуль, где блокируется канвас битмапа и отрисовывается на нем уже графика.
проблема решилась, когда я и в потоке для FillRect заблокировал канвас (Canvas.Lock)
сейчас пытаюсь найти описание что делает вообще Canvas.Lock и из-за чего у меня вырисовалась такая проблема.

Юрий Зотов ©, спасибо за ссылку!


 
sniknik ©   (2012-04-08 00:36) [9]

> я нигде не писал, что поток отрисовывает на канве VCL.
TBitmap
а я не писал про канву... только про VCL. TBitmap это VCL.

но вообще, если ты партизанишь, "нигде не пишешь", что и как делаешь, то это твои проблемы. и не парь нам мозг ими.
а если нет явного описания (кода), то отвечающий может предполагать ЛЮБЫЕ ужасы там, у тебя. обычно именно их и скрывают "скромные партизаны.


 
sniknik ©   (2012-04-08 00:43) [10]

> что я в потоке очищаю битмап типа bmp1.Canvas.FillRect(bmp1.Canvas.ClipRect);
в примере, по ссылке, не используется VCL, и битмап там виндовый, у которого нет канваса...

ну вот, насчет "ужасов" все похоже совпадает со "статистикой".


 
sniknik ©   (2012-04-08 00:48) [11]

> вырисовалась такая проблема.
не из-за него, а из-за "твоей логики" делать там где неправильно.

> что делает вообще Canvas.Lock
вообще то, насколько понимаю синхронизируется с основным потоком (там что-то с критической секцией)... т.е. ты хоть и через "Ж" но все таки сделал "как велит VCL", и только потому оно и заработало.



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

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

Наверх




Память: 0.48 MB
Время: 0.064 c
2-1338803238
rioko
2012-06-04 13:47
2013.03.22
Работа с нетипизированными файлами более 2 гигабайт


15-1336535282
Ega23
2012-05-09 07:48
2013.03.22
С Днём Победы!


15-1329769805
Юрий
2012-02-21 00:30
2013.03.22
С днем рождения ! 21 февраля 2012 вторник


15-1329373822
Димка На
2012-02-16 10:30
2013.03.22
Как узнать кто "мучает" диск?


2-1333908120
Fr
2012-04-08 22:02
2013.03.22
Странное поведение Navigate в TwebBrowser





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский