Radiohobby Forum

Интернет конференция журнала "Радиохобби"

Вы не вошли.

Объявление

Подписка на новые материалы от Николая Сухова - ролики, схемы, модели, онлайн конференции, консультации, чат.

Внимание! Почта в доменах Яндекс и Mail.ru не будет работать в профилях форумчан, из-за введённых правительством Украины санкций против этих компаний. Всем, кто ранее использовал подобную почту, для сохранения прежней функциональности форума, рекомендуется её поменять.

Огромная просьба, заливать тематические картинки и файлы в личные файловые каталоги на форуме, чтобы они не потерялись, со временем!

Ссылка "Загрузки" находится справа внизу формы набора сообщения.

Подписка на журнал "Радиохобби" прекращена. Подробности. Форум же - продолжает свою работу.

#11 22.09.2004 10:46:01

PM
Новичок
Здесь с 07.09.2004
Сообщений: 19

Re: Builder 5 кто работает? подмогните чайнику

2Sugar
Раз уж затронули дело вкуса, то...
Простейший, практически школьный пример, - у Вас есть BMP файл, даже без RLE сжатия, размер - любой. Проведите прямое фурье-преобразование указываемой пользователем области, скажем, для красной компоненты цвета. И проделайте все это с помощью "Тох же Memo, RichEdit, ListBox или что-то в єтом духе."
Далее, FileCreate, FileWrite, FileClose - это отнюдь не  WIN API.
Эти функции действительно инкапсулируют  WIN API, но определены они в VCL. По поводу WIN API - поглядите в MSDN Library.
memcpy - это вовсе не старинка. При необходимости прямого копирования из одной области памяти в другую вы не найдете более простой и удобной функции, она отвечает ANSI C  стандартам и поддерживается всеми производителями компиляторов. Очень сомневаюсь, что ее когда-либо перестанут использовать профессиональные программисты всего мира.
О динамическом выделении памяти и "простеньком" удалении с помощью delete. delete - оператор С++, применение которого обеспечивает правильное освобождение памяти для любых типов С++. Может, Вы предложите что-то лучшее? smile
Конечно, прежде чем пользоваться чем угодно, нужно понимать, как "оно" работает, т.е. "читайте инструкцию".
И если Вы сами, своими руками, выделяете память под свои объекты, и затем ее очищаете, то утечки могут возникать лишь из-за невнимательности или неопытности, снова же только Вашей.
В противном случае компилятору придется выполнять эту же работу за вас (при создании статических объектов), и никто не гарантирует на 100%, что разработчики компилятора сами не допустили огреха.
Использование структур не может быть сложным ни для кого.
Если не использовать структуры, классы, указатели, работу с памятью, то скажите,
ЗАЧЕМ Вам С++ ?????
Успехов. smile

Вне форума

#12 23.09.2004 09:48:52

Sugar
Участник
Откуда: Луганская, Донецкая обл.
Здесь с 19.05.2004
Сообщений: 190
Сайт

Re: Builder 5 кто работает? подмогните чайнику

Простейший, практически школьный пример,
А в какой школе такие примеры даются, если человек занимается электроиникой, а програмирование как посредник межлу электроникой и ПК, то зачем Вам это преобразование Фурье,
если уж сильнов математику полезли, давайте обсудим использование Matlab (можно писать на С, есть библиотеки для работі с RS232).
Я думаю Ваш пример не по теме, человеку нужно біло просто читать и записівать данніе ьв файл.

Далее, FileCreate, FileWrite, FileClose - это отнюдь не  WIN API.
Кто занимается С++Builder знает 2-х томник Холлингверта, почитайте раздел функции WIN API.

delete - оператор С++, применение которого обеспечивает правильное освобождение памяти для любых типов С++. Может, Вы предложите что-то лучшее?

Да завтра предложу.

Если не использовать структуры, классы, указатели, работу с памятью, то скажите,
ЗАЧЕМ Вам С++ ?????
Скажите это человеку который только осваивает C++. Я думаю он ничего не поймет.

Вне форума

#13 23.09.2004 14:13:04

PM
Новичок
Здесь с 07.09.2004
Сообщений: 19

Re: Builder 5 кто работает? подмогните чайнику

Да, конечно, Вы правы, начинать нужно с самого элементарного.. Но чтение из файлов и обработка произвольных данных уже предполагает наличие каких-то базовых знаний языка.
Для изучения Билдера полезнее самоучитель английского языка, чем двух- и более-томники. Как, в принципе, и для любых вопросов программирования. Современные системы разработки сопровождаются, обычно, совсем неплохо составленной документацией. Поэтому честно признаюсь, что упомянутую Вами книгу я не читал. Зато провел не одну тысячу часов за изучением всяческих хелпов и оригинальной документации. Ничего более официального, чем MSDN Library от Майкрософта, Вы вряд ли найдете.
Ну а преобразования Фурье и электроника (я полагаю, с этим согласится большинство электронщиков), как только заходит речь о мало-мальски серьезной обработке (или анализе) сигнала, оказываются понятиями неразделимыми, и ничего в себе сверхестественного не имеет. Если Вы поинтересуетесь у людей, применяющих в своей РАБОТЕ цифровые сигнальные процессоры, думаю, это подтвердят.
Предложение по поводу управления памятью будут мне очень интересны. Кстати, надеюсь, это положит конец довольно малоинформативному изложению наших точек зрения на совершенно общие вопросы. Возможно, Вы сможете действительно сообщить что-то, чего я не встречал ранее. За это буду искренне благодарен.

Вне форума

#14 23.09.2004 14:38:51

PM
Новичок
Здесь с 07.09.2004
Сообщений: 19

Re: Builder 5 кто работает? подмогните чайнику

Да, чтобы не быть уж слишком голословным, можно далеко не ходить.
Вот примеры деклараций действительно тех функций, котрые принято относить в винапи (Platform SDK)

Так файлы (порты, устройства) создают (открывают):

HANDLE CreateFile(
  LPCTSTR lpFileName,
  DWORD dwDesiredAccess,
  DWORD dwShareMode,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  DWORD dwCreationDisposition,
  DWORD dwFlagsAndAttributes,
  HANDLE hTemplateFile
);


А так записывают:

BOOL WriteFile(
  HANDLE hFile,
  LPCVOID lpBuffer,
  DWORD nNumberOfBytesToWrite,
  LPDWORD lpNumberOfBytesWritten,
  LPOVERLAPPED lpOverlapped
);


Закрывают дескрипторы так (отнюдь, не только файловые):
BOOL CloseHandle(
  HANDLE hObject
);


Неужели сильно похоже на предлагаемые в Билдере упрощенные варианты работы ТОЛЬКО с файлами?

Вне форума

#15 24.09.2004 09:22:19

Sugar
Участник
Откуда: Луганская, Донецкая обл.
Здесь с 19.05.2004
Сообщений: 190
Сайт

Re: Builder 5 кто работает? подмогните чайнику

довольно малоинформативному изложению наших точек зрения на совершенно общие вопросы
Согласен разговор бестолку.
Насчет памяти
Книга Стандартная библиотека С++ на примерах Пабло Халперн
Утечка памяти и повторное удаление.
Рассмотрим использование функции доступа для записи
void Address::lastname(const char *s) }{lastname_=s;}
есть некоторій класс Address поле lastname_ обїявлено как char*
Предположим что s указывает на Jones а lastname_ на Doe
После выполнения присваивания оба указателя будут связаны с одним и тем же значением.
При этом возникает две проблемы. Во-первых, данные, с которыми ранее был связан указатель lastname_, становится недоступными и блокируют часть памяти, которая становится безхозной. Это явление называется утечкой памяти. Во-вторых, что еще более важно, деструктор класса при удалении объекта Address будет пітаться освободить блок памяти, на которій теперь указівает lastname_. Но другой объект Address также может иметь указатель на этот блок памяти. Если несколько объектов попытаются освободить один  и тот же  блок памяти,то, как вы уже догадались, возникает ситуация неопределенности.
Что избежать утечки памяти и возникновенич ситуации  неопределенности, необходимо выполнять глубинное копирование текстовых строк.
(конструктор-копировщик и оператор присваивания)
Насчет портов, то эти три функции это лишь малая часть.
Например если захотите описать структуру DCD то удет не один листок формата А4. а плюс структура TIMEOUTS вообещ что работать с портом нужно еще написать текст (в пять раз больший от Ваших функций).

Вне форума

#16 24.09.2004 11:01:13

PM
Новичок
Здесь с 07.09.2004
Сообщений: 19

Re: Builder 5 кто работает? подмогните чайнику

Так, дело уже ближе к телу, приятно. smile
Да, абсолютно верно, пример корректен, но это не утечка памяти, это пример безграмотности программиста.
для копирования строк следует пользоваться функцией strcpy.
Такое присвоение указателей можно проводить лишь для перегруженных типов указателей (встречаются как smart pointers в документации), которые, обычно, каждый программист пишет для себя сам. Иначе, конечно же, не присвоится ничего, кроме длинного целого числа, которым этот указатель можно представить.
А выглядеть функция должна следующим образом:
void Address::lastname(const char *s) }{strcpy(lastname_, s);}
Теперь указатели будут указывать туда же, куда и до вызова метода, информация будет скопирована. Конечно же, поле lastname_ должно быть достаточной длины (количество символов строки s плюс 1).

----Насчет портов, то эти три функции это лишь малая часть...
Естественно, не считаю необходимым копировать весь МСДН в этот форум. smile) Тем более, что существует msdn.microsoft.com/library/default.asp и www.gotdotnet.ru/DotNet/MSDNTranslate/default.aspx для тех, у кого трудности с пониманием английских текстов.

Вне форума

Сейчас в этой теме пользователей: 0, гостей: 1
[Bot] ClaudeBot

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.027 сек, 7 запросов выполнено - Использовано памяти: 616.56 Кбайт (Пик: 666.93 Кбайт) ]