Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 798
от 16.07.2007, 22:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 490, Экспертов: 62
В номере:Вопросов: 3, Ответов: 6


Вопрос № 94753: Здравствуйте. Вопрос по работе с CОМ портом. Порт открываю так: HANDLE m_hComm = CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ); Выставляю параметры: DCB dcb;<...
Вопрос № 94826: Привет всем! Помогите разобраться с remove_if для списка (list из STL). Как определить свою ф-цию, которая выполняла то что делает прога текст которой приведен в приложении (он взят из MSDN). Но хотя результат вроде выдается правиль...
Вопрос № 94830: Здравствуйте! Скажите пожалуйста что означают строки inline vecarg( const ta_a& A ) : Argv( A ) {} inline const float Evaluate( const int i ) const { return Argv.Evaluate( i ); } в отрывке кода в приложении что такое inlin...

Вопрос № 94.753
Здравствуйте. Вопрос по работе с CОМ портом. Порт открываю так:

HANDLE m_hComm = CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 );

Выставляю параметры:

DCB dcb;

if( GetCommState( m_hComm, &dcb ) == 0 )
return GetLastError();

dcb.BaudRate = CBR_115200;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;

if( SetCommState( m_hComm, &dcb ) == 0 )
return GetLastError();

А дальше хочу запустить функцию ожидания:

DWORD dwRes = WaitForSingleObject( m_hComm, 100 );

Так вот она без ожидания выходит со статусом WAIT_OBJECT_0, хотя в порт ничего не кидается.

В связи с выше сказанным вопрос, что не до крутил? Нужно чтобы функция ожидания вываливалась с WAIT_OBJECT_0 только при наличии данных для чтения в порту, или по таймауту в противном случае.
Отправлен: 11.07.2007, 12:33
Вопрос задал: Winogradov Sergey A. (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Stv
Здравствуйте, Winogradov Sergey A.!
В функции CreateFile параметр dwFlagsAndAttributes должен быть ноль - для синхронной работы с портом или FILE_FLAG_OVERLAPPED - для ассинхронной работы с портом.

Приложение:

Ответ отправила: Stv (статус: 1-ый класс)
Ответ отправлен: 11.07.2007, 13:03

Отвечает: Ilkras
Здравствуйте, Winogradov Sergey A.!
Обычно из сериального порта сразу читают. Тогда не возникает проблем со статусом хэндлера. Как написал предыдущий эксперт, вы можете определить порт для синхронной или для асинхронной работы. В принципе, если сразу будете читать, то код получится немного проще.
Ответ отправил: Ilkras (статус: Студент)
Ответ отправлен: 12.07.2007, 17:10


Вопрос № 94.826
Привет всем!
Помогите разобраться с remove_if для списка (list из STL).
Как определить свою ф-цию, которая выполняла
то что делает прога текст которой приведен в приложении
(он взят из MSDN). Но хотя результат вроде выдается правильный
работает она не правильно, поскольку переопределенный оператор ()
класса is_four_chars вообще нигде не выполняется, а выполняется
оператор определенный в классе not_equal_to, т.е. проверяется
условие !=. Можно ли как-то создать свою функцию, которая и будет
определять параметры элемента списка, например, как в этом примере.
Всем спасибо за ответы.

Приложение:

Отправлен: 11.07.2007, 19:57
Вопрос задал: kool (статус: Практикант)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: V1s0r
Здравствуйте, kool!

В приложении код - надеюсь то, что вам надо. Не забывайте помещать operator() в открытый интерфейс класса (public).

Ещё дам вам пару советов.

1. Если будете работать с STL, то советую книгу Николая Джосьютиса С++ Стандартная библиотека. Лучше к ней обращайся, избежите выражений, подобно binder2nd<not_equal_to<string> >(is_four_chars(), "useless parameter").

2. А ещё лучше (но это только с опытом) - библитека lambda из boost (www.boost.org). Лучше один раз увидеть...

Удачи! Как говорится,
Use STL - open your mind :)

Приложение:

Ответ отправил: V1s0r (статус: 3-ий класс)
Ответ отправлен: 11.07.2007, 21:04


Вопрос № 94.830
Здравствуйте!
Скажите пожалуйста что означают строки
inline vecarg( const ta_a& A ) : Argv( A ) {}
inline const float Evaluate( const int i ) const
{ return Argv.Evaluate( i ); }
в отрывке кода в приложении
что такое inline понимаю
на сколько я понимаю функция vecarg это конструктор
Что такое Argv ?
Почему нет определения функции, а взамен стоит {}
В строке
inline const float Evaluate( const int i ) const
{ return Argv.Evaluate( i ); }

не понимаю что значит const после
inline const float Evaluate( const int i ) ведь в функции
должно далее быть {}?

Приложение:

Отправлен: 11.07.2007, 20:36
Вопрос задал: Марченко Роберт Владимирович (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: V1s0r
Здравствуйте, Марченко Роберт Владимирович !

Это базовые конструкции языка С++: списки инициализации конструктора, константные функции-члены, встраиваемые конструкторы (вообще, встраиваемые функции-члены). Вы найдёте эту информацию в соответствующих разделах любого учебника по С++ для начинающих.
Ответ отправил: V1s0r (статус: 3-ий класс)
Ответ отправлен: 11.07.2007, 21:15

Отвечает: Алексей Демаков
Здравствуйте, Марченко Роберт Владимирович !

inline vecarg( const ta_a& A ) : Argv( A ) {}

Это действительно конструктор - называется как класс, нет возвращаемого значения.
После двоеточия можно перечислить инициализаторы полей. То есть, значение поля Argv ссылается туда же, куда и A. {} - это определение функции, но пустое, единственное действие выполняется до {} - это инициализация Argv.

inline const float Evaluate( const int i ) const
{ return Argv.Evaluate( i ); }

Последний const говорит о том, что метод Evaluate не меняет состояния объекта, у которого вызывается. То есть, гарантируется, что все поля объекта после вызова будут иметь то же значение, что и до. В частности, нельзя присваивать полям новое значение и вызывать не const методы у этого же объекта.
Ответ отправил: Алексей Демаков (статус: Студент)
Ответ отправлен: 11.07.2007, 21:15
Оценка за ответ: 5

Отвечает: Katyass
Argv - private переменная класса vecarg, которая определяется в конструкторе:

inline vecarg( const ta_a& A ) : Argv( A ) {}

а это в свою очередь равносильно:

inline vecarg( const ta_a& A )
{
Argv = A;
}
Ответ отправила: Katyass (статус: 2-ой класс)
Ответ отправлен: 12.07.2007, 11:31
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.53 beta от 09.07.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное