До Михайловского не дотягивает. Тема интересная, но язык тяжеловат.
2 Potapych
Хрюкнула свинья, из недостраны, с искусственным языком, самым большим достижением которой - самый большой трезубец из сала. А чем ты можешь похвастаться, ну кроме участия в ВОВ на стороне Гитлера, расстрела евреев в Бабьем Яру и Волыньской резни?.
Прочитал первую книгу и часть второй. Скукота, для меня ничего интересно. 90% текста - разбор интриг, написанных по детски. ГГ практически ничему не учится и непонятно, что хочет, так как вовсе не человек, а высший демон, всё что надо достаёт по "щучьему велению". Я лично вообще не понимаю, зачем высшему демону нужны люди и зачем им открывать свои тайны. Живётся ему лучше в нечеловеческом мире. С этой точки зрения весь сюжет - туповат от
подробнее ...
начала до конца, так как ГГ стремится всеми силами, что бы ему прищемили яйца и посадили в клетку. Глупостей в книге тоже выше крыши, так как писать не о чем. Например ГГ продаёт плохенький меч демонов, но который якобы лучше на порядок мечей людей, так как им можно убить демона и тут же не в первый раз покупает меч людей. Спрашивается на хрена ему нужны железки, не могущие убить демонов? Тут же рассказывается, что поисковики собирают демонический метал, так как из него можно изготовить оружие против демонов. Однако почему то самый сильный поисковый отряд вооружён простым железом, который в поединке с полудеманом не может поцарапать противника. В общем автор пишет полную чушь, лишь бы что ли бо писать, не заботясь о смысле написанного. Сплошная лапша и противоречия уже написанному.
Часть вторая продолжает «уже полюбившийся сериал» в части жизнеописания будней курсанта авиационного училища … Вдумчивого читателя (или слушателя так будет вернее в моем конкретном случае) ждут очередные «залеты бойцов», конфликты в казармах и «описание дубовости» комсостава...
Сам же ГГ (несмотря на весь свой опыт) по прежнему переодически лажает (тупит и буксует) и попадается в примитивнейшие ловушки. И хотя совершенно обратный
подробнее ...
пример (по типу магического всезнайки или суперспеца) был бы еще хуже — но все же порой так и хочется прибавить герою +100 очков к сообразительности))
В остальном же все идет без особых геройств и весьма планово (если не считать очередной интриги в финале книги, как впрочем было и в финале части первой)). Но все же помимо чисто технических нюансов службы (весьма непростой кстати...) и «ожидания экшена» (что порой весьма неоправданно) — большая часть (как я уже говорил) просто отдана простому пересказу «жита и быта» бесправного существа именуемого «курсант»))
Не знаю кому как — но мне данная книга (в формате аудио) дико «зашла»)) Так что если читать только ради чтения (т.е не спеша и не пролистывая страницы), то и Вам (я надеюсь) она так же придется «ко двору»))
Как ни странно, но похоже я открыл (для себя) новый подвид жанра попаданцы... Обычно их все (до этого) можно было сразу (если очень грубо) разделить на «динамично-прогрессорские» (всезнайка-герой-мессия мигом меняющий «привычный ход» истории) и «бытовые-корректирующие» (где ГГ пытается исправить лишь свою личную жизнь, а на все остальное ему в общем-то пофиг)).
И там и там (конечно) возможны отступления, однако в целом (для обоих
подробнее ...
вариантов) характерно наличие какой-то итоговой цели (спасти СССР от развала или просто желание стать гораздо успешнее «чем в прошлый раз»). Но все чаще и чаще мне отчего-то стали попадаться книги (данной «линейки» или к примеру попаданческий цикл Р.Дамирова «Курсант») где все выстроено совсем на других принципах...
Первое что бросается в глаза — это профессия... Вокруг нее и будет «вертеться все остальное». Далее (после выбора любимой темы: «медик-врач», военный, летчик, милиционер, пожарный и пр) автор предлагает ПРОСТО пожить жизнь героя (при всех заданных условиях «периода подселения»).
И да — здесь тоже будут всяческие геройства, свершения и даже местами прогрессорство (куда уж без него), но все это совсем НЕ является искомой целью (что-то исправить, сломать или починить). Нет! Просто — каждая новая книга (часть) это лишь очередная «дверь», для того что-бы еще чуть-чуть пожить жизнь (глазами героя).
И самое забавное, что при данном подходе — уже совсем не обязательны все привычные шаблоны (использовав которые писать-то в принципе трудновато, ибо ГГ уже отработал «попаданческий минимум», да и что к примеру, будет делать генсек с пятью звездами ГСС, после победы над СаСШ? Все! Дальше писать просто нет никакого смысла (т.к дальше будет тупо неинтересно). А тут же ... тут просто поле не паханное)) Так что «только успевай писать продолжение»))
P.S Конкретно в этой части ГГ (вчерашний школьник) «дико щемится» в авиационное училище — несмотря на «куеву тучу» косяков (в виде разбитого самолета, который ему доверили!!!) и неких «тайн дома …» нет не Романовых)) а его личного дома)).
Местами ГГ (несмотря на нехилый багаж и опыт прошлой жизни) откровенно тупит и все никак не может «разрулить конфликт» вырастающий в очередное (казалось бы неприодолимое препятствие) к заветной цели... Но... толи судьба все же милостива к «засланцу», то ли общее количество (хороших и желающих помочь) знакомых (посвященных в некую тайну) все же не переводится))
В общем — книга (несмотря на некоторые шороховатости) была прослушана на «ура», а интрига в финале (части первой) мигом заставило искать продолжение))
символ потерян
CE_PTO
Только для Windows95. Тайм-аут на параллельном порту
CE_RXOVER
Переполнение приемного буфера или принят символ после символа конца файла (EOF)
CE_RXPARITY
Ошибка четности
CE_TXFULL
Переполнение буфера передачи
lpStat
Адрес структуры COMMSTAT. Должен быть указан, или адрес выделенного блока памяти, или NULL, если не требуется получать информацию о состоянии.
Если с информацией об ошибке все ясно, то со структурой COMMSTAT мы еще не встречались. Вот она:
typedef struct _COMSTAT
DWORD fCtsHold:1;
DWORD fDsrHold:1;
DWORD fRlsdHold:1;
DWORD fXoffHold:1;
DWORD fXoffSent:1;
DWORD fEof:1;
DWORD fTxim:1;
DWORD fReserved:25;
DWORD cbInQue;
DWORD cbOutQue;
} COMSTAT, *LPCOMSTAT;
Поля структуры имеют следующее значение:
fCtsHold
Передача приостановлена из-за сброса сигнала CSR.
fDsrHold
Передача приостановлена из-за сброса сигнала DSR.
fRlsdHold
Передача приостановлена из-за ожидания сигнала RLSD (receive-line-signal-detect). Более известное название данного сигнала – DCD (обнаружение несущей).
fXoffHold
Передача приостановлена из-за приема символа XOFF.
fXoffSent
Передача приостановлена из-за передачи символа XOFF. Следующий передаваемый символ обязательно должен быть XON, поэтому передача собственно данных тоже приостанавливается
fEof
Принят символ конца файла (EOF).
fTxim
В очередь, с помощью TransmitCommChar, поставлен символ для экстреной передачи.
fReserved
Зарезервировано и не используется.
cbInQue
Число символов в приемном буфере. Эти символы приняты из линии но еще не считаны функцией ReadFile.
cbOutQue
Число символов в передающем буфере. Эти символы ожидают передачи в линию. Для синхронных операций всегда 0.
Теперь Вы знаете почти все о работе с последовательными и параллельными портами в синхронном режиме. Особенности непосредственной работы с модемами я не буду рассматривать, так как существует большой набор высокоуровневых функций и протоколов, таких как TAPI, специально предназначеных для работы с модемами. Если Вас все же интересует эта тема, то почитайте описания функции GetCommModemStatus, и структур MODEMDEVCAPS и MODEMSETTINGS. В остальном работа с модемом ничем не отличается от работы с обычным портом.
Синхронный режим обмена довольно редко оказывается подходящим для серьезной работы с внешними устройствами через последовательные порты. Вместо полезной работы Ваша программа будет ждать завершения ввода/вывода, ведь порты работают значительно медленнее процессора. Да и гораздо лучше отдать время процессора другой программе, чем крутиться в цикле ожидая какого-либо события. Другими словами, пришло время знакомиться с асинхронной работой с портами.
Начнем с событий связаных с последовательными портами. Вы указываете системе осуществлять слежение за возникновением связанных с портом событий устанавливая маску с помощью функции
BOOL SetCommMask(HANDLE hFile, DWORD dwEvtMask);
Маска отслеживаемых событий задается вторым параметром. Можно указывать любую комбинацию следующих значений:
EV_BREAK
Состояние разрыва приемной линии
EV_CTS
Изменение состояния линии CTS
EV_DSR
Изменение состояния линии DSR
EV_ERR
Ошибка обрамления, перебега или четности
EV_RING
Входящий звонок на модем (сигнал на линии RI порта)
EV_RLSD
Изменение состояния линии RLSD (DCD)
EV_RXCHAR
Символ принят и помещен в приемный буфер
EV_RXFLAG
Принят символ заданый полем EvtChar структуры DCB использованой для настройки режимов работы порта
EV_TXEMPTY
Из буфера передачи передан последний символ
Если dwEvtMask равно нулю, то отслеживание событий запрещается. Разумеется всегда можно получить текущую маску отслеживаемых событий с помощью функции
BOOL GetCommMask(HANDLE hFile, LPDWORD lpEvtMask);
Вторым параметром задается адрес переменной принимающей значение текущей установленой маски отслеживаемых событий. В дополнение к событиям, перечисленым в описании функции SetCommMask, данная функция может возвратить следующие:
EV_EVENT1
Устройство-зависимое событие
EV_EVENT2
Устройство-зависимое событие
EV_PERR
Ошибка принтера
EV_RX80FULL
Приемный буфер заполнен на 80 процентов
Эти дополнительные события используются внутри драйвера. Вы не должны переустанавливать состояние их отслеживания.
Когда маска отслеживаемых событий задана, Вы можете приостановить выполнение своей программы до наступления события. При этом программа не будет занимать процессор. Это выполняется вызовом функции
BOOL WaitCommEvent(HANDLE hFile, LPDWORD lpEvtMask, LPOVERLAPPED lpOverlapped);
Замечу, что в переменной, адресуемой вторым параметром, не будут устанавливаться внутренние события драйвера (перечислены в описании функции GetCommMask). В единичное состояние установятся только те биты, которые соответствуют реально произошедшим событиям.
Адрес структуры OVERLAPPED требуется для асинхронного ожидания (возможно и такое). Однако пока будем полагать, что порт открыт для синхронных операций,
Последние комментарии
2 дней 35 секунд назад
2 дней 17 минут назад
2 дней 29 минут назад
2 дней 35 минут назад
2 дней 3 часов назад
2 дней 3 часов назад