Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Общие вопросы > передача указатели с дальнейгим смещением |
Автор: leg501 4.6.2008, 07:26 |
И так есть два потока, первый вычисляет по написаной схеме и складывает результат в буфер ->массив типа short , эти данные нужно передать в другой поток и использовать там некоторюю часть этого массива а точьнее конкретно значения, естественая форма передачи это указатель на это самый массив и вот здесь возникает проблемка чтобы сместить уазатель на нужный мне элемент так как индекс имеет тип dword, попытки задействовать конструкции типа inc(mass,index) приводят к к ошибке типов, с приведением типов знаком плохо поэтому тоже безрезультатно, на даный момент реализовано так что массив просто копирутся в новый масив во втором потоке ,но этодолго и неэкономичьно . |
Автор: Snowy 4.6.2008, 11:16 | ||
Что-то не всё ясно. Во-первых неясно, что естественного в указателе? И зачем указатель двигать? Не лучше ли передать массив и индекс? Указатели можно двигать в c++. В дельфи эта операция, хоть и возможна, но штатные средства отсутствуют, т.к. такие вещи неконтролируемы и опасны. Хотя при желании можно.
Но не рекомендую. Такие приёмы подразумевают знание внутренних механизмов и устройства Delphi. |
Автор: leg501 4.6.2008, 11:55 | ||||||
1) слишком большой обьем память минимальный размер 64000 типа дворд. 2)насколько я понимаю это смешение на 8 типов интежер?
мне же нужно сместится на N количество дворд в указателе на масив типа шорт и присвоить это значение переменой.
так это описно в си E440_Buffer=тоже указатель на масив. PS сильно не бейте если написал чтото не так |
Автор: Beltar 4.6.2008, 12:31 | ||||||
В DRKB мне попалась статья об арифметике указателей. Согласно ей операции Inc\dec применимы к типизированным указателям и выполняют смещение адреса на величину базового типа указателя. Т. е. вот такой код:
Выведет не мусор, а 1.
Нет, на 8 байт. 2 leg501 Используй просто var параметр. |
Автор: Snowy 4.6.2008, 12:41 |
Именно. Массив будет передаваться по ссылке. Дельфи даже не подумает его копировать, дублировать и т.п. И размер массива тут не играет никакой роли. |
Автор: leg501 4.6.2008, 13:14 |
хм идея нужно попробовать . тогда такой вопрос оба класса являются потоками один для сбора (двойной буфер) другой для обработки ,невыйдет ли колизий при возможном обращении к одним итемже данным с разной целью(один читает другой записывае ) понятно что нужно попытаться исключить такую ситуацию но всеже. |
Автор: Snowy 4.6.2008, 13:20 |
Если это 2 разных объекта, то они никак не связаны. Если ты работаешь с одним объектом (и читаешь и пишешь), то разумеется это повлияет на объект. А конкретно - произойдёт смещение позиции в потоке, согласно произведённой операции. Тут уж зависит от целей. Либо ты работаешь с двумя объектами с разными данными, либо с одним объектом и одним блоком данных. Не вижу тут проблем - только варианты... |
Автор: leg501 4.6.2008, 14:11 |
чтож буду пробовать варианты) спс что отозвались |
Автор: Beltar 4.6.2008, 15:39 |
Кстати, а зачем тебе 2 потока? У тебя данные непрерывно извне поступают? |