Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потоки, взаимодействие и работа, Практическое применение 
:(
    Опции темы
Экскалупатор
Дата 16.2.2010, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



Цитата(WantToProg @  16.2.2010,  11:49 Найти цитируемый пост)
Во, я так и сделал. В принципе работает, хотя помоему это неправильно. Думаю правильнее было бы блокировать первый поток пока не закончится второй.

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

по поводу чтения байтов: ReadByte.
правда оно читает 1 байт. так что можно в цикле запускать побайтовое чтение до тех пор пока не будет прочитан конец потока, или запрашивать количество доступных байтов.

Добавлено через 48 секунд
ну или можно строку конвертировать в массив байтов.
PM MAIL ICQ   Вверх
WantToProg
Дата 16.2.2010, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 13.4.2009

Репутация: нет
Всего: нет



Цитата(Экскалупатор @  16.2.2010,  13:00 Найти цитируемый пост)
по поводу чтения байтов: ReadByte.
правда оно читает 1 байт. так что можно в цикле запускать побайтовое чтение до тех пор пока не будет прочитан конец потока, или запрашивать количество доступных байтов.

В том то и дело, я не знаю, чем и когда закончится пакет получаемых данных. Если в tcp сокете есть DataAvailable, то тут этого нет. А только буффер DataRecieved И  int byteRecieved = port.BytesToRead; Эх, как бы это все заставить работать нормально. Просто усыплять цикл искуственно, кажется не правильным подходом, происходит искусственная задержка, что само собой не хорошо.

Цитата(Экскалупатор @  16.2.2010,  13:00 Найти цитируемый пост)
ну или можно строку конвертировать в массив байтов. 

А здесь самая большая загвоздка. Я пробовал конвертировать в массив байтов. Получается совсем не то, что приходит в байтах (проверял и снифером и по DataRecieved)
PM MAIL   Вверх
WantToProg
Дата 16.2.2010, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 13.4.2009

Репутация: нет
Всего: нет



doublepost

Это сообщение отредактировал(а) WantToProg - 16.2.2010, 14:37
PM MAIL   Вверх
Экскалупатор
Дата 16.2.2010, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



Цитата(WantToProg @  16.2.2010,  13:07 Найти цитируемый пост)
В том то и дело, я не знаю, чем и когда закончится пакет получаемых данных.

из MSDN
ReadByte возвращает
Байт, приведенный к типу Int32, или -1, если считан конец потока.
PM MAIL ICQ   Вверх
WantToProg
Дата 16.2.2010, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 13.4.2009

Репутация: нет
Всего: нет



Цитата(Экскалупатор @  16.2.2010,  14:52 Найти цитируемый пост)
из MSDN
ReadByte возвращает
Байт, приведенный к типу Int32, или -1, если считан конец потока. 

На этом спасибо, но я вроде решил проблему
Код

System.IO.Ports.SerialPort newPort = new SerialPort(COM_PORT_ADDR, 38400, Parity.None, 8, StopBits.One);
newPort.Open();
newPort.Write(GET_TIME, 0, GET_TIME.Length);
Thread.Sleep(500);//Даем больше времени на ожидание данных
//string readex = newPort.ReadExisting();//Убираем эту строку и заменяем на
int byteRecieved = newPort.BytesToRead;
byte[] messByte = new byte[byteRecieved];
newPort.Read(messByte, 0, byteRecieved);
newPort.Close();

Все оказалось проще чем я думал
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.