![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
leg501 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 31.1.2008 Репутация: нет Всего: 1 |
И так есть два потока, первый вычисляет по написаной схеме и складывает результат в буфер ->массив типа short , эти данные нужно передать в другой поток и использовать там некоторюю часть этого массива а точьнее конкретно значения, естественая форма передачи это указатель на это самый массив и вот здесь возникает проблемка чтобы сместить уазатель на нужный мне элемент так как индекс имеет тип dword, попытки задействовать конструкции типа inc(mass,index) приводят к к ошибке типов, с приведением типов знаком плохо поэтому тоже безрезультатно, на даный момент реализовано так что массив просто копирутся в новый масив во втором потоке ,но этодолго и неэкономичьно .
|
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Что-то не всё ясно.
Во-первых неясно, что естественного в указателе? И зачем указатель двигать? Не лучше ли передать массив и индекс? Указатели можно двигать в c++. В дельфи эта операция, хоть и возможна, но штатные средства отсутствуют, т.к. такие вещи неконтролируемы и опасны. Хотя при желании можно.
Но не рекомендую. Такие приёмы подразумевают знание внутренних механизмов и устройства Delphi. |
|||
|
||||
leg501 |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 31.1.2008 Репутация: нет Всего: 1 |
1) слишком большой обьем память минимальный размер 64000 типа дворд. 2)насколько я понимаю это смешение на 8 типов интежер?
мне же нужно сместится на N количество дворд в указателе на масив типа шорт и присвоить это значение переменой.
так это описно в си E440_Buffer=тоже указатель на масив. PS сильно не бейте если написал чтото не так |
||||||
|
|||||||
Beltar |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 3 Всего: 7 |
В DRKB мне попалась статья об арифметике указателей. Согласно ей операции Inc\dec применимы к типизированным указателям и выполняют смещение адреса на величину базового типа указателя. Т. е. вот такой код:
Выведет не мусор, а 1.
Нет, на 8 байт. 2 leg501 Используй просто var параметр. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
||||||
|
|||||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
||||
|
||||
leg501 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 31.1.2008 Репутация: нет Всего: 1 |
хм идея нужно попробовать .
тогда такой вопрос оба класса являются потоками один для сбора (двойной буфер) другой для обработки ,невыйдет ли колизий при возможном обращении к одним итемже данным с разной целью(один читает другой записывае ) понятно что нужно попытаться исключить такую ситуацию но всеже. |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Если это 2 разных объекта, то они никак не связаны.
Если ты работаешь с одним объектом (и читаешь и пишешь), то разумеется это повлияет на объект. А конкретно - произойдёт смещение позиции в потоке, согласно произведённой операции. Тут уж зависит от целей. Либо ты работаешь с двумя объектами с разными данными, либо с одним объектом и одним блоком данных. Не вижу тут проблем - только варианты... |
|||
|
||||
leg501 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 31.1.2008 Репутация: нет Всего: 1 |
чтож буду пробовать варианты) спс что отозвались
|
|||
|
||||
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 3 Всего: 7 |
Кстати, а зачем тебе 2 потока? У тебя данные непрерывно извне поступают?
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |