Форум: "Начинающим";
Текущий архив: 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.069 c