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

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


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

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

Выпуск № 692
от 26.03.2007, 07:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 463, Экспертов: 59
В номере:Вопросов: 8, Ответов: 14


Вопрос № 79056: Здравствуйте. Билдер 6. Есть большая программа одновременно работающая по 6 ком-портам, 2 шины CAN, плюс клиент-сервер сокеты. Клиент посылает маленькие пачки по 6-10 байт на сервер. На сервере организована очередь следующим обр...
Вопрос № 79066: Я реализую программу, которая производит опрос аналоговых сигналов. От меня требуется организовать по событию, произошедшему на аналоговой линии, отправку trap по snmp протоколу. Еще нужно реализовать возможность опроса по snmp работоспособности ...
Вопрос № 79097: Доброе время суток, уважаемые эксперты. Поясните, а чем отличается (float) i/x от float(i)/x .
Вопрос № 79110: Здравствуйте! Необходимо реализовать вот такую задачу. Разработать два класса А и В (не используя наследования). В классе А со-держится динамический массив. Класс В содержит: метод poisk вычисляю-щий и сохраняющий в классе В max значение элементов ма...
Вопрос № 79116: Здравия, мне необходима помощь в одной проблеме при работе с Win Sockets. При попытке забиндить сокет(! при том не равный INVALID_SOCKET) через bind выдает ошибку о том что сокет не является сокетом, подскажите, где может сидеть баг. До этого при нек...
Вопрос № 79151: Уважаемые эксперты, подскажите, как в C++ Builder получить cookie? Нашёл упоминание, что это можно сделать функцией InternetGetCookie, но она выдаёт ошибку [Linker Error] Unresolved external 'InternetGetCookieA' referenced from ... Подскажит...
Вопрос № 79156: Подскажите, как подключится к MySql или где об этом написано. Меня интересуют cgi скрипты на С. Что нашёл, там только про cgi, а про связь с MySql ни слова....
Вопрос № 79158: здраствуйте, у меня такой вопрос как создать консолько CheckBox или RadioButton в VS с++ 6.0. Или лучше создание нескольких CheckBox'ов при неизвестном количестве!!! Можно пример!!! ...

Вопрос № 79.056
Здравствуйте.

Билдер 6. Есть большая программа одновременно работающая по 6 ком-портам, 2 шины CAN, плюс клиент-сервер сокеты.

Клиент посылает маленькие пачки по 6-10 байт на сервер.
На сервере организована очередь следующим образом:

в .h-файле
struct ocheredb
{
int len; //длина пакета
unsigned char* buf; //пакет
ocheredb* next; //указатель на след. элемент
};
ocheredb *start,*end;

в .cpp-файле

void __fastcall TLanF::ServerClientRead(TObject *Sender, TCustomWinSocket *Socket)
{
int receive_length;

receive_length=Socket->ReceiveLength();

//постановка сообщения в очередь
ocheredb* tek=new ocheredb;
tek->len=receive_length;
tek->buf=new unsigned char[receive_length];
Socket->ReceiveBuf(tek->buf,receive_length);
tek->Sock=Socket;
tek->next=0;
if(!start)
{
start=end=tek;
}
else
{
end->next=tek;
end=tek;
}
}

потом в отдельном потоке идет обработка пакетов из этой очереди.

Проблема:
При частой посылке клиентом данных пакетов (без задержки например раз 10 подряд) сервер не успевает принимать их по-отдельности. Склеивает по 3-4 штуки.

Мнение: я так понимаю программа просто не успевает забирать пакеты из буфера с требуемой частотой, поэтому они успевают свалиться в буфер по нескольку штук. И только потом я их оттуда читаю.

Вопрос: как избавиться от описанной проблемы не используя квитирование?

Заранее спасибо, Виталий.
Отправлен: 20.03.2007, 12:05
Вопрос задал: Мироненко Виталий Юрьевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: ramok
Здравствуйте, Мироненко Виталий Юрьевич!

на выбор:
1. введите в пакет длину пакета
2. заведите себе на сервере информацию о длине пакета в зависимости от типа пакета
3. сделайте все пакеты одинаковой, фиксированной длинны

обычные способы применяемые в данном случае.
в промышленных решениях (я так понимаю об этом идет сейчас речь) обычно еще вводят CRC для раcпознавания целосности пакета. так как недай бог где то или вылетит байт или исказится у вас полетит работа всех обрабатываемых устройств сразу. а так можно отсеивать мусор и продолжить работу. тем более в таких интерфейсах как RS-232 никто не защищен от помех, тем более в промышленных условиях
Ответ отправил: ramok (статус: Практикант)
Ответ отправлен: 20.03.2007, 20:54
Оценка за ответ: 5


Вопрос № 79.066
Я реализую программу, которая производит опрос аналоговых сигналов.
От меня требуется организовать по событию, произошедшему на аналоговой линии, отправку trap по snmp протоколу. Еще нужно реализовать возможность опроса по snmp работоспособности моей программы. То есть если она не работает или выключена, NMS (network management system) при опросе должна понять что с ней что-то не так.
Я думаю, что надо будет создавать свой MIB для моего компьютера, где программа будет работать.
Можете ли вы мне посоветовать какие-нибудь модули для C++ для реализации данного функционала?
Отправлен: 20.03.2007, 13:13
Вопрос задал: Holyman (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: ramok
Здравствуйте, Holyman!

самый популярный свободный проект по snmp
http://net-snmp.sourceforge.net/

Для Windows
http://www.codeproject.com/library/WinSNMPWrapper.asp
http://www.logisoftar.com/ProductsSnmpTkCpp.htm
Ответ отправил: ramok (статус: Практикант)
Ответ отправлен: 20.03.2007, 20:46


Вопрос № 79.097
Доброе время суток, уважаемые эксперты.
Поясните, а чем отличается (float) i/x от float(i)/x
Отправлен: 20.03.2007, 16:46
Вопрос задал: Palpatin (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 6)

Отвечает: Ilkras
Здравствуйте, Palpatin!
во втором случае вы делаете кастинг на i и затем делите его - float - на x. какого типа x вы не указали, так что тип результата неизвестен. в первом случае вы выполняете деление и делаете кастинг на все выражение и результат будет типа float.
Ответ отправил: Ilkras (статус: 5-ый класс)
Ответ отправлен: 20.03.2007, 17:00

Отвечает: Ross
Здравствуйте, Palpatin!

Различие в порядке выполнения действий. В первом случае вы делите i на x и затем приводите полученный тип к типу float. Во втором - приводите i к типу float и делите его на x.
Разница эта очень существенна. Допустим, что x, i - целые числа 3 и 2 соответственно. Тогда в первом случае мы делим int на int - следовательно результат будет тоже целым: 1. Во втором случае делим float на int и в результате получим 1,5.
Ответ отправил: Ross (статус: 6-ой класс)
Ответ отправлен: 20.03.2007, 17:33
Оценка за ответ: 2
Комментарий оценки:
Ваш ответ неверен. В обоих случаях получится 1.5.

Отвечает: John Paramol
Здравствуйте, Palpatin!
Никакой описанной экспертами разницы в последовательности действий не будет, по крайней мере, если вы пишете в ANSI C/C++.
Разница вот в чем:
Приведение типа (float)x - это стиль языка C, но его можно использовать и в C++.
А float(x) - это стиль языка C++ и этот вариант в C работать не будет.
---------
1=2, at values 1 large enough
Ответ отправил: John Paramol (статус: 7-ой класс)
Ответ отправлен: 20.03.2007, 17:44
Оценка за ответ: 4
Комментарий оценки:
Я запомню, спасибо.

Отвечает: Sergey A. Wedensky
Здравствуйте, Palpatin!

Имхо, предыдущие эксперты не совсем правы...
Формально в синтаксисе C++ (float)i - приведение типа, а float(i) - это уже конструирование нового объекта типа float с вызовом конструктора копирования, параметром которого является i.

Таким образом, первая запись - приведение переменной i к типу float, затем деление на x (именно в таком порядке, и приведение только значения i, а не выражения i/x), вторая - конструирование временного объекта типа float с присвоением ему в конструкторе копирования значения i, затем деление на x/
Ответ отправил: Sergey A. Wedensky (статус: Студент)
Ответ отправлен: 20.03.2007, 17:47
Оценка за ответ: 5
Комментарий оценки:
То что нужно! Большое спасибо за ответ.

Отвечает: Gremlin
Здравствуйте, Palpatin!
вообще-то, конкретно для простых типов (int, long, float), в данном случае нет ни какой разницы, где поставить скобку, во всех случаях будет производиться вещественное деление, т.к. при наличии любого из операндов операции вещественного типа, эта операция считается вещественной.

преобразование типа:
Type(x)
(Type)x
абсолютно равнозначно для одной переменной, а для нескольких переменных первая экономит лишние скобки

float(5/3) == (float)(5/3) == float(5)/3 == (float)5/3 == 5/(float)3 == 5/float(3)
Ответ отправил: Gremlin (статус: 2-ой класс)
Ответ отправлен: 20.03.2007, 19:32
Оценка за ответ: 4
Комментарий оценки:
Примерно так я и думал. Мне было интересно, в чем разница этих записей. Спасибо за ответ.

Отвечает: kool
Здравствуйте, Palpatin!
Ничем. А вот например,
если i=3,x=4
float(i)/x == 0.75
(float) (i/x) == 0.00;
Удачи!



---------
I am.
Ответ отправил: kool (статус: Студент)
Ответ отправлен: 20.03.2007, 20:09
Оценка за ответ: 2
Комментарий оценки:
Результат одинаков: 0.75.


Вопрос № 79.110
Здравствуйте! Необходимо реализовать вот такую задачу. Разработать два класса А и В (не используя наследования). В классе А со-держится динамический массив. Класс В содержит: метод poisk вычисляю-щий и сохраняющий в классе В max значение элементов массива класса А и его индекс в массиве, а также метод metod(), выполняющий замену найден-ного элемента и симметричного ему в массиве. Наследования не использо-вать.
Отправлен: 20.03.2007, 18:58
Вопрос задал: Nnn
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: kool
Здравствуйте, Nnn!
//cpp-файл
A _a;
B _b(_a);

Теперь в объекте _b все вычислено.

Приложение:

---------
I am.

Ответ отправил: kool (статус: Студент)
Ответ отправлен: 20.03.2007, 20:08
Оценка за ответ: 4

Отвечает: Терсков Сергей
Здравствуйте, Nnn!
Попробуйте вариант с дружественными классами...

Приложение:

Ответ отправил: Терсков Сергей (статус: 6-ой класс)
Ответ отправлен: 21.03.2007, 03:22


Вопрос № 79.116
Здравия, мне необходима помощь в одной проблеме при работе с Win Sockets. При попытке забиндить сокет(! при том не равный INVALID_SOCKET) через bind выдает ошибку о том что сокет не является сокетом, подскажите, где может сидеть баг. До этого при некоторых попытках общения с сокетами я заметил, что оно то работает, то нет.
p.s.
Хотелось бы пообщаться с людьми хорошо разбирающихся в сокетах в асе.

Приложение:

Отправлен: 20.03.2007, 19:32
Вопрос задал: Sulphur (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: ramok
Здравствуйте, Sulphur!

if(bind(ServerSock,(SOCKADDR*)&SA,szSA))

попробуйте заменить на

if(bind(ServerSock,(SOCKADDR*)&SA,szSA)) != SOCKET_ERROR)
.
за одно и проверять что возвращает WSAStartup()
Ответ отправил: ramok (статус: Практикант)
Ответ отправлен: 20.03.2007, 20:02


Вопрос № 79.151
Уважаемые эксперты, подскажите, как в C++ Builder получить cookie? Нашёл упоминание, что это можно сделать функцией InternetGetCookie, но она выдаёт ошибку [Linker Error] Unresolved external 'InternetGetCookieA' referenced from ...

Подскажите, как ей пользоваться или какой нибудь альтернативный метод.
Спасибо.
Отправлен: 21.03.2007, 00:13
Вопрос задал: Azrr (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Gremlin
Здравствуйте, Azrr!
чтобы использовать InternetGetCookie, подключите к проекту библиотеку Wininet.lib
Ответ отправил: Gremlin (статус: 2-ой класс)
Ответ отправлен: 21.03.2007, 08:32
Оценка за ответ: 4
Комментарий оценки:
Всегда наглядней привести простенький пример в пару строчек, так можно сразу во всём разобраться...


Вопрос № 79.156
Подскажите, как подключится к MySql или где об этом написано. Меня интересуют cgi скрипты на С. Что нашёл, там только про cgi, а про связь с MySql ни слова.
Отправлен: 21.03.2007, 00:43
Вопрос задал: Латыпов Константин Михайлович/camoroh13 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: ramok
Здравствуйте, Латыпов Константин Михайлович/camoroh13!

http://www.mysql.ru/docs/man/C.html
Ответ отправил: ramok (статус: Практикант)
Ответ отправлен: 22.03.2007, 18:20


Вопрос № 79.158
здраствуйте, у меня такой вопрос как создать консолько CheckBox или RadioButton в VS с++ 6.0. Или лучше создание нескольких CheckBox'ов при неизвестном количестве!!!
Можно пример!!!
Отправлен: 21.03.2007, 01:45
Вопрос задал: HITY (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: ramok
Здравствуйте, HITY!

http://www.firststeps.ru/mfc/steps/help/r.php?472
внизу примеры есть
Ответ отправил: ramok (статус: Практикант)
Ответ отправлен: 23.03.2007, 01:01
Оценка за ответ: 5


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.46 от 18.03.2007
Яндекс Rambler's Top100

В избранное