На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> При чтении сом порта возникает ошибка 995, как побороть?
    Работаю с СОМ портом. Периодически возникает ошибка 995 "The I/O operation has been aborted because of either thread exit or an application request"
    лечится закрытием о открытием порта заново. Но я так думаю, что это не правильно. Как побороть? Или так и должно быть?
      Мы тоже можем гадать почему такое происходит
        Ну что ж, гадаем: предполагаю, что ты прибиваешь поток, в котором работаешь с искомым портом, с помощью TerminateThread.

        Добавлено
        А так у тебя есть как минимум три варианта:
        1. Искать причину самому.
        2. Подробно описать алгоритм взаимодействия с портом.
        3. Запортить сюда соответствующий кусок кода.

        Добавлено
        Также есть подозрение, что автор о ClearCommError не слышал, хотя ее использование в данной ситуации все равно будет костылем.
          Цитата shm @
          Ну что ж, гадаем: предполагаю, что ты прибиваешь поток, в котором работаешь с искомым портом, с помощью TerminateThread.

          Добавлено
          А так у тебя есть как минимум три варианта:
          1. Искать причину самому.
          2. Подробно описать алгоритм взаимодействия с портом.
          3. Запортить сюда соответствующий кусок кода.

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

          Искал причину сам, и вот что обнаружил. Есть две программки, которые обмениваются по 422 порту сообщениями.
          Если запущены обе и идет обмен, то через некотоое время при управлении потоком чтения, возникает ошибка 995. Если запустить только одну программку, ту в которой возникает эта ошибка 995, она работает без ошибок, деже при многократном управлении процессом обмена. Управление обменом состоит в включении и выключении выполнения куска кода анализа принятого сообщения.
          Не могу приатачить код, не позволяют секретные службы нашего концерна.
            Ну в чтении порта ничего секретного нету.
              Нашел в интернете документик
              "Работа с коммуникационными портами (COM и LPT) в программах для Win32"
              В котором в частности описана функция
              ExpandedWrap disabled
                BOOL ClearCommError(
                HANDLE hFile,
                LPDWORD lpErrors,
                LPCOMSTAT lpStat
                );


              И о чудо, я получил причину моей ошибки. Оказалось, что у меня переполняется приемный буфер! Длина моего сообщение 4018 байт, а буфер имеет длину 4096 байт.
              Отсюда вопрос, как правильно определить необходимую длину буфера?
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0303 ]   [ 15 queries used ]   [ Generated: 14.06.25, 21:43 GMT ]