The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"потоки и чтение порта"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"потоки и чтение порта"  
Сообщение от bopurod email(ok) on 12-Окт-07, 15:23 
помогите советом.

читаю данные с ком порта с помощью read

в main() все работает.

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

вот функция потока

-------------------------------------------------
void * read_thread_function (void *arg)
{
int rb;
char *rbuf;
int i;
while (1)
{
rb = read (fd, rbuf);
printf ("\nread %i bytes\n",rb);
for (i=0;i<rb;i++) putchar (rbuf);
sleep (1);
}
return;
}
-----------------------------------------------

получается: read 0 bytes

точно такой же код в функции main работает как надо.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "потоки и чтение порта"  
Сообщение от tux2002 email on 12-Окт-07, 15:38 
А как передаётся fd? Собственно arg и д.б. указатель на fd, а потом его нужно привести к нужному типу и использовать в read.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "потоки и чтение порта"  
Сообщение от NuINu (??) on 12-Окт-07, 16:11 
>А как передаётся fd? Собственно arg и д.б. указатель на fd, а
>потом его нужно привести к нужному типу и использовать в read.
>

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "потоки и чтение порта"  
Сообщение от bopurod email(ok) on 12-Окт-07, 16:13 
>>А как передаётся fd? Собственно arg и д.б. указатель на fd, а
>>потом его нужно привести к нужному типу и использовать в read.
>>
>
>а по моему это хорошо что считываются всего 0 байтов, потому что
>если считать чуть больше то будет какая нибудь фигня типа срыва
>стека или еще чего нибудь.
>нельзя же считывать что то из файла, в неинициализированный буфер

непонимаю, про какой буфер идет речь? может напишешь код?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "потоки и чтение порта"  
Сообщение от bopurod email(ok) on 12-Окт-07, 16:11 
>А как передаётся fd? Собственно arg и д.б. указатель на fd, а
>потом его нужно привести к нужному типу и использовать в read.
>

да, именно так и делал, передавал указатель на fd, но не работает всеравно, пробовал и через глобальную переменную тоже не работает. заметил, что если в функции main не трогать порт вобще а открывать его в потоке то работает, но это не подхлодит. наверное надо передать еще какие-то указатели...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "потоки и чтение порта"  
Сообщение от Sot on 12-Окт-07, 16:24 
>в main() все работает.
>
>но если я пытаюсь прочитать точно также в другой функции или в
>созданном потоке то ничего не прочитывается.

Покажи, как COM инициализируешь. В свое время сам на подобные грабли наступал. Делал все по извесной доке, а в ней ошибка присутствует. :( Там в одном месте '&' не хватает.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "потоки и чтение порта"  
Сообщение от bopurod email(ok) on 12-Окт-07, 16:55 
всем большое спасибо, разобрался в чем дело.
когда передаеш функции указатель на int и пытаешся использовать именно ту переменную через указатель то, не работет.
если записать содержимое в отдельную переменную то работает.
но при условии, что опции порта доступны.
те структура termios должна быть тоже доступна.
можно получить на нее указатель, или просто объявить как глобальную переменную.
:)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "потоки и чтение порта"  
Сообщение от tux2002 email on 12-Окт-07, 20:50 
вообще не понимаю как трид может видеть что то кроме аргумента в него переданного. Если надо создавай структуру, передавай на неё указатель,разыменовывай и используй.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "потоки и чтение порта"  
Сообщение от tux2002 email on 12-Окт-07, 21:02 
то есть видеть то он может но Вам тогда надо почитать про мютексы и семафоры
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "потоки и чтение порта"  
Сообщение от jd (??) on 12-Окт-07, 21:03 
В приведённом выше куске кода, как вам уже писали, вы пытаетесь читать данные неизвестно куда (указатель rbuf не проинициализирован). К тому же не указывая, сколько читать (фактически, произвольное количество). Так что если у вас используется именно такой код, то его работа - чистое совпадение и он ещё неоднократно будет то работать, то вдруг нет.

man read(2)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру