powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Зависает close()
14 сообщений из 14, страница 1 из 1
Зависает close()
    #33899110
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В чем дело и как с этим бороться?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
Rs232::Rs232(char *portname, int mode, char *bound) {
    int _bound;
    char *bound_start;

    if ((port1 = open(portname, mode | O_NOCTTY | O_NONBLOCK)) == - 1 ) {
#ifdef RS232_CONSOLE
	perror("Ошибка открытия порта")
#endif
	;
    }
    else {
        _bound=B19200;
	if (bound) {
	    if (bound[ 0 ]=='B') bound_start=bound+ 1 ;
	    else bound_start=bound;
	    if (!strcmp(bound_start, "0")) _bound=B0;
	    if (!strcmp(bound_start, "50")) _bound=B50;
	    if (!strcmp(bound_start, "75")) _bound=B75;
	    if (!strcmp(bound_start, "110")) _bound=B110;
	    if (!strcmp(bound_start, "134")) _bound=B134;
	    if (!strcmp(bound_start, "150")) _bound=B150;
	    if (!strcmp(bound_start, "200")) _bound=B200;
	    if (!strcmp(bound_start, "300")) _bound=B300;
	    if (!strcmp(bound_start, "600")) _bound=B600;
	    if (!strcmp(bound_start, "1200")) _bound=B1200;
	    if (!strcmp(bound_start, "1800")) _bound=B1800;
	    if (!strcmp(bound_start, "2400")) _bound=B2400;
	    if (!strcmp(bound_start, "4800")) _bound=B4800;
	    if (!strcmp(bound_start, "9600")) _bound=B9600;
	    if (!strcmp(bound_start, "19200")) _bound=B19200;
	    if (!strcmp(bound_start, "38400")) _bound=B38400;
	    if (!strcmp(bound_start, "57600")) _bound=B57600;
	    if (!strcmp(bound_start, "115200")) _bound=B115200;
	    if (!strcmp(bound_start, "230400")) _bound=B230400;
	}
    
	struct termios oldtio, newtio;

            tcgetattr(port1, &oldtio);
	newtio.c_cflag=_bound | CRTSCTS | CS8 | CLOCAL | CREAD;
	newtio.c_iflag=IGNPAR;
	newtio.c_oflag= 0 ;
	newtio.c_lflag= 0 ;//ICANON;
	newtio.c_cc[VMIN]= 0 ;
	newtio.c_cc[VTIME]= 1 ;
	tcflush(port1, TCIFLUSH);
	tcsetattr(port1, TCSANOW, &newtio);
    }
}

bool Rs232::ready() {
    if (port1==- 1 ) return false;
	      else return true;
}

int Rs232::readb(unsigned char *b, int n) {
    return read(port1, b, n);
}

int Rs232::writeb(unsigned char *b, int n) {
    return write(port1, b, n);
}

#include <stdio.h>

Rs232::~Rs232() {
FILE *f=fopen("a111", "w");
fclose(f);

    if (port1 != - 1 ) {
f=fopen("a222", "w");
fclose(f);
	close(port1);
f=fopen("a333", "w");
fclose(f);
    }
f=fopen("a444", "w");
fclose(f);
}

Пишется в порт 2 раза по 16 байт. Потом идет попытка удаления объекта и после a222 кирдык.
...
Рейтинг: 0 / 0
Зависает close()
    #33899118
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл уточнить, что второй конец шнурка оторван.
...
Рейтинг: 0 / 0
Зависает close()
    #33899792
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RSипед пишешь, что-ли? ;)
Так их уже понаписывали... возьми готовый или поищи примеры работающих сорцов.
Платформа какая?
Проверяй ошибки чтения/записи в порт, результат close() ... Тут многое от ОС зависит.

>> Забыл уточнить, что второй конец шнурка оторван.
А как проверяешь тогда? Замкнул бы уже TxD с RxD для тестов, что-ли...
...
Рейтинг: 0 / 0
Зависает close()
    #33900312
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitrii K.RSипед пишешь, что-ли? ;)
Так их уже понаписывали... возьми готовый или поищи примеры работающих сорцов.
Платформа какая?
Проверяй ошибки чтения/записи в порт, результат close() ... Тут многое от ОС зависит.

>> Забыл уточнить, что второй конец шнурка оторван.
А как проверяешь тогда? Замкнул бы уже TxD с RxD для тестов, что-ли...

Уже рисипедю на этом классе (почти этом) несколько лет, но на клозу много внимания не обращал. Платформа линух. Пишется нормуль, есс-но ничег не читается.

Когда подключен куда-нидь - ОК. Надо для программы, уметь его срубать, когда хочеться, например, кто-нибудь перешел на эрэс, а канала нету. Тогда идем на езернет, например, а эрэс завис, соответственно, менеджер переключения каналов дохнет.
...
Рейтинг: 0 / 0
Зависает close()
    #33900453
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhПлатформа линух.
Ну, тогда не знаю, с линухом дела не имел.
try catch , что-ли, попробуй...
Тут надо смотреть, как система с портами работает...

Линух - это ж опенсорц , так что зри в корень )
...
Рейтинг: 0 / 0
Зависает close()
    #33900473
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitrii K.Линух - это ж опенсорц , так что зри в корень )

Садюга. :)
...
Рейтинг: 0 / 0
Зависает close()
    #33900495
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ту олл:
Есть мысля, что порт, перед закрытием пытается, что-то отработать, так как данные в него пихались. Но не может из-за того, что шнурок оторван. Если это так, то как сделать, чтобы он всю свою ответственность скинул и молча закрыл порт?
...
Рейтинг: 0 / 0
Зависает close()
    #33900887
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не использой f* функции. Они буферизируют обращение с файлом.
Используй простые open/read/write/close.
...
Рейтинг: 0 / 0
Зависает close()
    #33902243
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНе использой f* функции. Они буферизируют обращение с файлом.
Используй простые open/read/write/close.

Без них тоже виснет
...
Рейтинг: 0 / 0
Зависает close()
    #33924659
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Up Проблема до сих пор не решена
...
Рейтинг: 0 / 0
Зависает close()
    #33924697
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhUp Проблема до сих пор не решена

глупый вопрос...
а НЕ в деструкторе дышит ?

(круглый)
...
Рейтинг: 0 / 0
Зависает close()
    #33924758
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0глупый вопрос...
а НЕ в деструкторе дышит ?


Не проверял. А какая разница?

PS: Какой автор, такие и вопросы.
...
Рейтинг: 0 / 0
Зависает close()
    #33925175
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
newtio.c_cflag=_bound | CRTSCTS | CS8 | CLOCAL | CREAD;
CRTSCTS - flow control
Второй конец шнурка оторван - сигнала готовности нет - ваши байты лежат где-то в буфере и ждут отправки. Попробуйте сделать tcflush(port1, TCOFLUSH) перед close
...
Рейтинг: 0 / 0
Зависает close()
    #33925328
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlonenewtio.c_cflag=_bound | CRTSCTS | CS8 | CLOCAL | CREAD;
CRTSCTS - flow control
Второй конец шнурка оторван - сигнала готовности нет - ваши байты лежат где-то в буфере и ждут отправки. Попробуйте сделать tcflush(port1, TCOFLUSH) перед close

Супер! Наконец-то! Примерно это я и искал. Спасибо.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Зависает close()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]