Здравствуйте, гость ( Вход | Регистрация )
Дата поста: | В теме: | За сообщение: | Спасибо сказали: | ||
---|---|---|---|---|---|
27.10.2015, 10:33 | "Склеивание" сообщений ТСР | Т.е. 4 байта уж точно не разрежутся ? Вообще, можно и 2-мя обойтись, надежней. Сколько ждать полного буфера, длина, которого была заявлена в заголовке, ведь можем и не дождаться? Надеюсь, что ТСР не переставит блоки, а будет все-таки давать их в порядке отправления. Контрольная сумма меня особенно радует. Разрежутся или нет четыре байта длины - никто тебе не даст никаких гарантий. Да это и не имеет значения. Просто вычитывай из сокета, пока не наберутся в начале посылки эти четыре байта. А потом вычитывай столько байтов, сколько заявлено в заголовке. Либо они дойдут, либо ты получишь ошибку связи и должен на нее как-то отреагировать. Да, TCP не переставит блоки, в этом можно быть уверенным. |
pwp2008, | ||
26.10.2015, 14:45 | "Склеивание" сообщений ТСР | ......Клиент получает только одно, но "склеенное" из 2-х сообщение. Хотелось бы понять причины этого и по возможности "разделить" сообщения, чтобы они приходили на клиент в виде 2 сообщений. ...... и каждое сообщений приходит отдельно. Причем , уже при xxx > 11 . Если xxx=1, то сообщения "склеиваются" и в таком исполнении. Еще раз: протокол TCP ничего не "знает" ни о каких сообщениях. TCP просто передает поток байтов от передатчика (передающей стороны) к приемнику. Все. Как он будет "склеивать" или наоборот "разрезать" твои сообщения - никто не дает никаких гарантий. В зависимости от загрузки сети при одном и том же исходном коде и одних и тех же таймаутах может быть и "склеивание", и "разрезание" сообщений - по внутреннему усмотрению драйвера TCP. Поэтому подбирать какие-либо таймауты, слоты и прочее - бессмысленно. Правильный подход тебе описал коллега ViGOur. |
pwp2008, | ||
23.4.2013, 13:56 | C++11 | http://isocpp.org/blog/2013/04/trip-report...ng-2013-meeting This afternoon in Bristol, UK, the ISO C++ standards committee adopted generic lambdas, dynamic arrays (an improved version of C99 VLAs), variable templates, reader/writer locks, make_unique, optional<T>, standard library user-defined literals, and a number of other language and library improvements – and approved the result as the feature-complete Committee Draft (CD) of Standard C++14 to be distributed for its primary international review ballot. In addition to completing the C++14 CD document, the committee also made progress on three additional important parallel specifications that are on track to be published around the same time as C++14: File system library (draft), based on Boost.FileSystem version 3. Networking library, small at first and regularly extended. “Concepts Lite” language extensions (draft), to express template constraints and improve template usability and error messages. |
Iron Bug, | ||
19.9.2012, 11:09 | Книги по с++11 | Она же в epub: http://longfiles.com/eulb9o68wi7f/The.CPP....ition.epub.html |
igor_bogomolov, Iron Bug, Sinttex, ssoft, | ||
17.8.2012, 15:49 | Предварительное объявление класса | Используй forward declaration:
|
Snake174, | ||
20.2.2012, 12:00 | создание объектом собственной копии | Типичное решение (это классика):
|
good_game, | ||
18.1.2012, 9:27 | Доступ к железу в многопоточном приложении | r_13, мне вот как раз несколько (эххх.... изрядно уж!) лет назад приходилось разрабатывать похожую систему..... Несколько (много) "железных" устройств общались с компами по COM-портам и еще взаимодействовали друг с другом при этом. Архитектура получилась следующая: - на каждый тип "железного" устройства конструируется свой класс. Все эти "железячные" классы наследуют и поддерживают единый общий интерфейс (наследуются от абстрактного класса). Внутри класса для общения с устройством через COM-порт создаются два потока: на прием и на передачу, и две очереди: принятых сообщений и сообщений на отправку. Класс сам отслеживает таймауты, состояние устройства и прочее.... - количество экземпляров нужного класса определяется количеством железок данного типа, подключенных по каналам связи (у меня читалось из конфиг файла). - для организации взаимодействия устройств друг с другом сконструирован еще один класс - условно, диспетчер. Диспетчер создает (читая из конфига) нужное число экземпляров конкретных классов. - взаимодействие экземпляров между собой (как экземпляров одного класса, так и разных классов) идет по схеме "поставщик сообщений - подписчики". Все сообщения, принятые от конкретной железки, экземпляр соответствующего класса отдает диспетчеру. А диспетчер ведет реестр (список, лист) подписчиков, и отдает им сообщения. Здесь получается топология типа "звезда". Подписчик указывает, сообщения какого типа (а они разных типов) он желает получать. Каждый подписчик сам решает, как обрабатывать полученные сообщения. Прямого взаимодействия между железячными экземплярами нет, все идет только и исключительно через диспетчер. - в одном компе - один диспетчер и несколько "железячных" экземпляров. А диспетчеры разных компов общаются по Ethernet по такой же схеме - на одном компе поднимается "сервер", по сути дела - диспетчер более высокого уровня. Здесь тоже топология "звезда". Вот как-то так..... |
r_13, | ||
17.1.2012, 14:29 | Доступ к железу в многопоточном приложении | Мне кажется, что это неправильно, что один модуль раздает другим указатели, и эти другие - делают, что хотят и когда хотят..... в том числе, могут обращаться к недоступному больше железу. Лично я бы сделал бы несколько иначе а врхитектурном плане: Один модуль ловит сообщения от USB _и_ общается с железом. Он предоставляет всем остальным модулям доступ к железу посредством доступа к _своему интерфейсу_, не предоставляя этим "остальным модулям" прямого доступа к железу. Запросы сторонних модулей могут ставиться в очередь и обрабатываться по логике, определяемой этим "железячным" модулем. Таким образом, все взаимодействие с конкретной USB-железякой инкапсулировано внутри этого модуля. Если железяка отключается, то этот модуль просто завершает все оставшиеся в очереди запросы неуспешно. Нет? |
r_13, | ||
30.11.2011, 10:11 | namespace | И даже более того - даже если эту переменную объявить в хидере как статическую, в каждую единицу компиляции будет включен свой экземпляр переменной. Какие любопытные эффекты могут возникнуть оттого, что программист думает, что обращается к глобальной переменной x, а на самом деле обращается только к экземпляру, существующему только в данной единице компиляции - |
rp80, SEvg, | ||
23.9.2011, 14:44 | Какой принцип поправки на байты? | Такая штука называется "выравниванием". И связана она с тем, что чтение из памяти выровненных данных происходит быстрее, чем для невыровненных. Т.е. жертвуя некоторым (обычно небольшим) расходом памяти, увеличивается быстродействие программы. Выравнивание в GCC и MSVC можно задать отличным от дефолтового с помощью #pragma pack. Попробуй сравнить результаты, например, при #pragma pack(1). И да, с "лишними" битами (и байтами) ничего не происходит, - т.е. значения их содержат "мусор", на них нельзя полагаться. |
AXELman4ever, | ||
5.8.2011, 12:16 | Испытательный полет | Небольшое уточнение. Стрелка В.О. разделяет Неву на Большую Неву и Малую Неву. А Большая Невка ответвляется от Невы около Финляндского вокзала, как раз там, где стоит "Аврора", и в свою очередь дальше разделяется на Большую, Среднюю и Малую Невки. А фотки красивые! Здорово! PS: а я как-то вот не задумывался, почему Стрелка называется именно так. А вон оно как оказывается..... |
AD, Litkevich Yuriy, | ||
15.4.2011, 10:09 | Опубликован драфт Стандарта C++0x | Последний драфт Стандарта. Читайте: http://www.open-std.org/jtc1/sc22/wg21/doc.../2011/n3290.pdf С очень высокой вероятностью, этот драфт (возможно, с мелкими орфографическими правками) станет новым давно ожидаемым Стандартом языка C++, после чего за текст Стандарта придется уже плотить денюжку. Налетай, пока даром! |
BRE, igor_bogomolov, Iron Bug, panter_dsd, wiz29, | ||
16.7.2010, 11:45 | Вопрос по с++ | Эта особенность синтаксиса описана у Скотта Мейерса в его "Эффективное использование STL" - Совет 6: Остерегайтесь странностей лексического разбора C++. |
igor_bogomolov, | ||
4.5.2010, 12:35 | как пищать системным динамиком в виндовозе? | Beep Function Generates simple tones on the speaker. The function is synchronous; it performs an alertable wait and does not return control to its caller until the sound finishes. BOOL WINAPI Beep( __in DWORD dwFreq, __in DWORD dwDuration ); Parameters dwFreq The frequency of the sound, in hertz. This parameter must be in the range 37 through 32,767 (0x25 through 0x7FFF). Windows Me/98/95: The Beep function ignores this parameter. dwDuration The duration of the sound, in milliseconds. Windows Me/98/95: The Beep function ignores this parameter. |
Litkevich Yuriy, | ||
22.4.2010, 19:03 | Книги по C++ не совсем для начинающих | Александреску Андрей Современное проектирование на C++.pdf Вандевурд и Джосаттис Шаблоны C++.djvu Влиссидес Джон Применение шаблонов проектирования.pdf Джосаттис Николай C++ стандартная библиотека.pdf Мейерс Скотт Наиболее эффективное использование C++.djvu Мейерс Скотт Эффективное использование C++.djvu Мейерс Скотт Эффективное использование STL.djvu Саттер и Александреску Стандарты программирования на C++.djvu Саттер Херб Новые сложные задачи на C++.djvu Саттер Херб Решение сложных задач на C++.djvu Страуструп Язык C++ 3 изд.djvu Элджер Джефф C++ библиотека программиста.pdf (все книги существуют в электронном виде, гугл в помощь.... Но и в более традиционном бумажном - тоже! :-) ) |
Andrewshkovskii, | ||
22.4.2010, 13:00 | Использование сторонних библиотек | Посмотри экспорты этой DLL (например, утилитой Depends.exe или любой другой). Если в экспортах "простые читаемые" имена типа OpenDevice и т.п., то DLL скорее всего "простая", написанная по всем правилам. Если же в экспортах загадочные имена типа ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ, то все совсем не так радужно - другой компилятор такую DLL скорее всего не поймет; а если и поймет, то не факт, что сможет с ней правильно работать. |
AD, | ||
20.4.2010, 21:36 | как протестировать оператор присваивания и конструктор копирования класса? | Юрий, просто Стандарт языка (п. 5.3.5 положение (clause) 2) четко описывает требования к выделению и удалению памяти: - если память была выделена по new для единичного объекта (неважно, какого типа) - то удаляться она должна только delete для единичного объекта; - если память была выделена по new[] для массива объектов (array form) - то удаляться она должна только delete[] для массива объектов (тоже array form) и никак иначе. Иначе поведение программы не определено (Otherwise behavior is undefined, если мой склероз мне не изменяет). Причем, Стандарт никак не конкретизирует это "неопределенное поведение" - программе разрешается делать все, что ей заблагорассудится, начиная от порчи памяти и невоспроизводимых глюков, и вплоть до format C:. |
Litkevich Yuriy, | ||
20.4.2010, 19:12 | как протестировать оператор присваивания и конструктор копирования класса? | Я немного подправил код.... Правда, не компилировал! Только то, что бросается в глаза при чтении. Раскрывающийся текст
|
Litkevich Yuriy, | ||
16.4.2010, 18:53 | С++, оператор присваивания, каково должно быть поведение | Юрий, еще порекомендовал бы Джеффа Элджера "C++ библиотека программиста" и Херба Саттера "Решение сложных задач на C++" и "Новые сложные задачи на C++" - там конструирование и копирование объектов описано довольно подробно, в том числе с точки зрения безопасности и корректности состояния программы в целом. (Книги есть в электронном виде, гуглятся.) |
AD, | ||
6.4.2010, 10:02 | преобразование типа и классы | Не совсем так. Дефолтный конструктор, конструктор копирования, оператор = и деструктор относятся к специальным член-функциям. Дефолтный конструктор генерируется компилятором автоматически, если не указан явно ни один пользовательский конструктор. Как правило, такой дефолтный конструктор пустой и успешно оптимизируется компилятором. Однако, для всех баз и членов вызываются их дефолтные конструкторы, если таковые существуют, иначе генерируется ошибка компиляции. Для баз - в порядке их объявления в списке наследования, для членов - в порядке их объявления. Конструктор копирования не наследуется. Если не указан явно пользовательский конструктор копирования, то генерируется дефолтный конструктор копирования, который тупо почленно копирует все базы и члены класса. Порядок копирования тот же. То же самое верно и для оператора =. Если не указан явно пользовательский оператор назначения (присваивания), то генерируется дефолтный оператор =, который тупо вызывает операторы = для всех баз и членов. Порядок тот же. Тот же самый принцип действует и для деструкторов, с одним отличием: деструкторы всегда вызываются в порядке, обратном вызовам конструкторов. |
AD, | ||
3.2.2010, 11:20 | Посчитать количество элементов в sizeof | Если в этом хедере есть поле, отвечающее за число карт - пусть называется chart_count, то new MAC4ChartHeader[chart_count]; Но в общем имей в виду, что MAC4ChartHeader* pChartsList = new MAC4ChartHeader[/*<размер массива>*/]; небезопасно в смысле потери ресурсов (памяти и хз еще чего) при исключениях. Поэтому лучше оберни в вектор или shared_array или собственный класс, реализующий RAII. |
AD, | ||
4.10.2009, 22:35 | [C++] Генерация случайных чисел | ++Norton++, AD, | |||
27.9.2009, 21:47 | Шаблон проектирования Singleton (одиночка) | Юрий, по твоей реализации (кстати, практически классической!) у меня только два замечания: 1. конструкторы-деструкторы, которые ты хочешь скрыть, не обязательно реализовывать с пустым телом {}, достаточно просто объявить их private; 2. учти, что эта реализация работает только в строго однопоточной модели! В многопоточной ты либо "влетишь", либо надо реализовывать Double-Check Locking. Это, впрочем, тоже классика. А так ничего, вполне себе красиво!... |
AD, | ||
13.8.2009, 16:11 | Небольшие скрипты для выполнения в командной строке | Мда. Первая цель: дописываем к имени файла _123
Вторая цель: меняем расширение на .ss
Цитата "... Таким образом, читатель уже понял, что среди надстроек над ДОС бывают довольно бесполезные системы, которые только выглядят красиво, а на самом деле отнимают время пользователя, память на дисках и оперативную память ЭВМ. Обманчивая красота таких систем, однако, сильно воздействует на неискушенных пользователей, которые не имели практики работы на машине. Инерция мышления бывает столь сильна, что авторам приходилось наблюдать, как люди, начавшие работать с подобной надстройкой, впоследствии с трудом заставляют себя изучать команды ДОС. Хочется предостеречь от этой ошибки читателей ..." Из книги: ''Персональные ЭВМ в инженерной практике'', М. Радио и связь, 1989. |
AD, | ||
30.7.2009, 12:16 | Аналог Q_PROPERTY | Посмотри, например, вот на это: http://www.progz.ru/forum/index.php?showtopic=27073&st=0 |
igor_bogomolov, | ||
Текстовая версия | Сейчас: 22.11.2024, 0:12 |