Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.216 c
15-1332459005
Юрий
2012-03-23 03:30
2013.03.22
С днем рождения ! 23 марта 2012 пятница


15-1339791776
OPOPO
2012-06-16 00:22
2013.03.22
Как отключить Alt+Tab В XP?


15-1330115402
Юрий
2012-02-25 00:30
2013.03.22
С днем рождения ! 25 февраля 2012 суббота


15-1341824763
Дмитрий С
2012-07-09 13:06
2013.03.22
Teamviewer может отвечать на запросы UAC...


15-1336722340
xayam
2012-05-11 11:45
2013.03.22
Шахматы, май 2012: Ананд - Гельфанд