Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с виртуальным портом через голубой зуб / Windows 7  (Прочитано 18168 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
whale2
Читатель

ru
Offline Offline

« : 07-02-2014 18:14 » 

Есть проблемма, дивайс через адаптер HC-05 передает данные на комп, далее программа через виртуальный сом порт из под винды7 данные принимает.
Все хорошо до момента выключения дивайса или уход из зоны приема, после включения или приближения данные уже не идут. (также ведут себя всякие терминалки)
Попытки на время выключения дивайса закрывать виртуальный порт (типа данные не идут) а затем его пытаться открывать к успеху не привели.
Данные начинаю идти только если полностью закрыть прогу и открыть заново.
Как можно решить данную проблемму ?

Опишу работы проги:

порт открывается стандартно
port=CreateFile(comport,GENERIC_READ|GENERIC_WRITE,0,NULL,OP EN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
затем поток
ovr.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

если данные не идут, закрывается

CloseHandle(port);
CloseHandle(ovr.hEvent);
(закрывается без ошибки успешно)

далее опять
CreateFile()
тут выдает INVALID_HANDLE_VALUE
а GetLastError() выдает "отказано в доступе" причем говорит при любом назначенном зубу номере порта

далее если закрыть открыть прогу порт открывается успешно и данные идут.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 08-02-2014 04:47 » 

Не очень понятно, причём тут порт с точки зрения Windows. Лучше расскажи подробнее про сам адаптер, что и как в нём работает, какие события. Как ты узнаёшь, что данные идут или не идут, и нужно открыть или закрыть порт?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
whale2
Читатель

ru
Offline Offline

« Ответ #2 : 08-02-2014 13:20 » 

Адаптер обычный китайский мост uart-bluetooth  hc-05, от него я думаю ничего не зависит.
Дивайс через этот адаптер постоянно шлет пакеты, соответственно как перестается принимать эти пакеты в проге считаем что адаптер вышел из зоны или выключен.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 08-02-2014 14:07 » 

whale2, ты проигнорировал мой вопрос. А телепатов у нас тут не водится, чтобы твои проблемы за тебя угадывать. Если ты считаешь, что всякий программист, работающий с COM-портом, по 3 раза на неделе пишет программы для взаимодействия именно с HC-05, ты сильно ошибаешься.

Ещё раз: какая связь между устройством и тем портом, с которым ты работаешь?

1) Порт представляет устройство. Тогда как ты узнаёшь, что что-то там передаётся и получается, если порт не работает?

либо

2) Порт представляет что-то другое, а с устройством работаешь через некое специфическое API и занимаешься пересылкой из одного в другое. Тогда какое отношение имеет рассказ про устройство к проблеме с портом?

либо

3) Ты сам пишешь драйвер устройства и эмулируешь порт для других программ. Тогда непонятно, почему спрашиваешь про то, что сделать в программе, а не про то, как написать драйвер?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
whale2
Читатель

ru
Offline Offline

« Ответ #4 : 08-02-2014 17:39 » 


Вроде все ясно описал в самом начале.

Некий дивайс, скажем термометр, подключен в hc-05 и выброшен на улицу.
там он работает и шлет каждую секунду температуру по uart в hc-05.
Рядом расположенный комп витид hc-05 как bluetooth уст-во и назначает ему при добавлении виртуальный com порт.
Что непонято но то ?
Прога в компе открывает виртуальный com порт как обычный com порт и получает с него данные.
Если данные не идут в течении 5 сек прога начинает  думать что чего то не так и пытает восстановить связь методом закрытия и открытия виртуального com порта.

Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 08-02-2014 18:01 » 

Цитата: whale2
Рядом расположенный комп витид hc-05 как bluetooth уст-во и назначает ему при добавлении виртуальный com порт.
Что непонято но то ?
Мифология. У программиста есть:
- программа, которую пишет он сам;
- сторонний софт, который он использует.

Итак, какой софт внутри машины "видит и назначает"? И какова твоя роль в этом процессе назначения?

Цитата: whale2
Прога в компе открывает виртуальный com порт как обычный com порт и получает с него данные.
Ответ: никакого отношения твоя программа к драйверу не имеет. Исключительно пользователь виртуального COM-порта. Это выяснили.

Цитата: whale2
Если данные не идут в течении 5 сек прога начинает  думать что чего то не так и пытает восстановить связь методом закрытия и открытия виртуального com порта.
Я так понял, что помогает только перезапуск программы.

Цитата: whale2
FILE_FLAG_OVERLAPPED
Для чего ты используешь асинхронные операции ввода-вывода?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
whale2
Читатель

ru
Offline Offline

« Ответ #6 : 08-02-2014 18:36 » 


Итак, какой софт внутри машины "видит и назначает"? И какова твоя роль в этом процессе назначения?

Моя роль соединиться с сом портом и получать данные, если данные не идут что то делать.

Для чего ты используешь асинхронные операции ввода-вывода?
 Потому как прога не только принимает данные но и делает другую основную работы.
Работа с портом основана на
WaitForSingleObject(ovr.hEvent, READ_TIMEOUT) итд


Итак, какой софт внутри машины "видит и назначает"? И какова твоя роль в этом процессе назначения?

Цитата: whale2
Прога в компе открывает виртуальный com порт как обычный com порт и получает с него данные.
Ответ: никакого отношения твоя программа к драйверу не имеет. Исключительно пользователь виртуального COM-порта. Это выяснили.

Цитата: whale2
Если данные не идут в течении 5 сек прога начинает  думать что чего то не так и пытает восстановить связь методом закрытия и открытия виртуального com порта.
Я так понял, что помогает только перезапуск программы.

Цитата: whale2
FILE_FLAG_OVERLAPPED
Для чего ты используешь асинхронные операции ввода-вывода?
[/quote]
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 09-02-2014 03:48 » 

whale2,

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

С какой скоростью идёт поток данных? Что делает программа помимо чтения порта? Есть ли тормозящие операции?
« Последнее редактирование: 09-02-2014 10:47 от Sla » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
whale2
Читатель

ru
Offline Offline

« Ответ #8 : 09-02-2014 09:45 » 

Опрос порта идет со скоростью в три раза быстрее чем идут пакеты.
После подключения проблем нет, проблемы после отключения bluetooth уст-ва или выходе из зоны приема.
Тут вроде проблемма слегка ослабла, надо было перед

CloseHandle(port);
CloseHandle(ovr.hEvent);

вставить CancelIo(port);

без CancelIo(port); не работает

а так уже самооживает после пропадания сигнала но в течении 8-10 сек
Не подскажите програмулку для отслеживания on-line какие порты в win7 активны ?
Что то 10 сек для подключения мне кажется это перебор.

Насчет редактирования в упор не нашел кнопку


« Последнее редактирование: 09-02-2014 10:47 от Sla » Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 09-02-2014 10:45 » 

Цитата
Насчет редактирования в упор не нашел кнопку
Рано еще... редактировать свои сообщения.  Все будет, если сюда пришел что-то получить/поделиться.



Я чуть-чуть подчистил от лишнего (и в постах, и в количестве)

« Последнее редактирование: 09-02-2014 10:48 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 09-02-2014 11:59 » 

whale2, непонятно другое: почему работу по чтению потока (stream) не выделить в отдельную нить (thread)? Асинхронный ввод-вывод в твоей задаче не даёт никакого преимущества: всё равно приходится ждать на событии ввода. Асинхронный ввод-вывод нужен лишь при мультиплексировании сотен и тысяч одновременных потоков данных, когда задача не решается на нитях - слишком тормозить будет.

Тебя поток как таковой, похоже, не интересует, раз ты равнодушно относишься к пропаданию сигнала. А это значит, что можно использовать шаблон проектирования "доска объявлений". Нить чтения потока из порта в критической секции пишет в общую, разделяемую между нитями переменную - доску объявлений - структуру с информацией. Туда можно добавить поле даты и времени - момента обновления. Основная нить программы в той же критической секции читает доску в произвольном темпе и видит там всегда самую последнюю из дошедших записей. Дальше уж сама решает, что с этой записью делать: обрабатывать, пропускать повторы и устаревшие значения и т.д.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
v2
Помогающий

ua
Offline Offline

« Ответ #11 : 09-02-2014 13:38 » 

> если данные не идут, закрывается
кто сказал что данные не идут?
Вы ошибки при чтении записи получаете?

!
> далее если закрыть открыть прогу порт открывается успешно и данные идут.
!
что говорит о том, что проблема в Вашем коде.

Сделайте в отдельном потоке простое (не  FILE_FLAG_OVERLAPPED) последовательное чтение и запись -> проблема осталась?
Записан
whale2
Читатель

ru
Offline Offline

« Ответ #12 : 09-02-2014 17:00 » 

Зачем мне всякие нити потоки если просто можно опрашивать по таймеру
WaitForSingleObject(ovr.hEvent, READ_TIMEOUT) == WAIT_OBJECT_0
с частотой больше частоты пакетов ?
Зачем плодить тонны ненужного кода ?
Я же говорил, связь пропадает  если внешний дивайс выключить а затем включить.
(на обычном железном порту кстати никаких проблем нет)
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 09-02-2014 17:13 » 

whale2, но как ты сам уже заметил, асинхронные операции - это не совсем "просто". Там есть подводные камни. А ты не производишь впечатление знатока этих подводных камней, равно как и параллельного программирования вообще. Поэтому совет про thread как раз нацелен на то, чтобы сделать код более внятным и снизить риски твоей собственной путаницы, потенциальных багов. Маленький размер кода - это не признак его понятности. Любой спагетти-код будет короче структурированного, но при этом избыточно сложен.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
whale2
Читатель

ru
Offline Offline

« Ответ #14 : 09-02-2014 17:24 » 

Я не пойму мы чего обсуждаем то ? )
Как написать одно и тоже но разными методами ? Смысл в этом будет ?
Я не силен в параллельном програмировании под виндами тк это не требовалось.
Если кто то считает что его код опроса виртуального порта будет работать лучше опубликуйте его тут и я проверю его на реальном  железе тогда и будет видно.
Записан
whale2
Читатель

ru
Offline Offline

« Ответ #15 : 09-02-2014 17:24 » 

причем требуется чтобы прога была свободна на время между пакетами.
Записан
whale2
Читатель

ru
Offline Offline

« Ответ #16 : 09-02-2014 21:39 » 

Выяснил откуда задержка установки связи после сбоя -  всех тормозит функция CancelIo(port); - порядка 10-15 секунд, но без нее вообще не связывается, можно уменьшить время работы этой функции ?
Записан
whale2
Читатель

ru
Offline Offline

« Ответ #17 : 09-02-2014 22:10 » 

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

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}

#define Time2_read              200             // âðåìÿ ìåæäó îïðîñàìè , ìñ

#define TimeOut                 50             // ìàõ âðåìÿ îæèäàíèÿ ìåæäó äâóìÿ áàéòàìè
#define TimeoutMultiplier       0               // ìíîæèòåëü äëÿ òàé-àóòà (óìí íà êîë-âà ïðèíèì áàéò)
#define TimeoutConstant         0               // + âðåìÿ äëÿ îáùåãî òàé-àóòà

#define TimeoutMultiplierTrans  0               // òàéì-àóòû äëÿ ïåðåäà÷è
#define TimeoutConstantTrans    0               // òàéì-àóòû äëÿ ïåðåäà÷è

#define TimeAnswer              10             // âðåìÿ îïðîñà ïîðòà, ìñ
#define NumBait                 12              //  êîë-âî ïðèíèìàåìûõ áàéò
#define SpeedUart               CBR_9600       // ñêîðîñòü ïðèåìà
#define READ_TIMEOUT            5              // âðåìÿ îæèäàíèÿ ôóíêöèè ÷òåíèÿ, milliseconds

 
char            *comport;               // íîìåð ïîðòà
DWORD           bc, mask;
OVERLAPPED      ovr = {0};              // ñòðóêòóðû ïîòîêîâ
HANDLE          port;                   // äåñêðèïòîðû ïîðòîâ

DWORD           dwRead;
DWORD           dwRes;
BOOL            fWaitingOnRead = FALSE;

unsigned char   buf_in[1000], data[40];

bool            flag_djw, Port_Enabled = false;
char            numT=0;

//------------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{

comport="Com5";
flag_djw = false;
Port_Enabled==false;

Timer2->Interval=Time2_read;

Timer1->Enabled=true;
Timer2->Enabled=false;

}

//--------------------------- Îòêðûòèå ïîðòà -----------------------------------

void __fastcall TForm1::OpenComPortRead()
{

COMMTIMEOUTS    ct;
DCB             dcb;

FillMemory(&dcb, sizeof(dcb), 0);

ct.ReadIntervalTimeout=TimeOut;
ct.ReadTotalTimeoutMultiplier=TimeoutMultiplier;
ct.ReadTotalTimeoutConstant=TimeoutConstant;

ct.WriteTotalTimeoutMultiplier=TimeoutMultiplierTrans;
ct.WriteTotalTimeoutConstant=TimeoutConstantTrans;

port = CreateFile(comport,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);

  if (  port == INVALID_HANDLE_VALUE )
    {
        Port_Enabled = false;
        Label1->Caption = " Îøèáêà ïîðòà ";

     }
   else {

        Port_Enabled = true;
        Label1->Caption = comport;

        GetCommState(port, &dcb);                    // ÷òåíèå ïàðàìåòðîâ ïîðòà
        dcb.BaudRate = SpeedUart;
        dcb.fParity = FALSE;
        dcb.ByteSize = 8;
        dcb.StopBits = ONESTOPBIT;
        dcb.fRtsControl = RTS_CONTROL_DISABLE;
        dcb.fDtrControl = DTR_CONTROL_DISABLE;
        dcb.fNull = FALSE;

        SetCommState(port,&dcb);                        // óñò ïàðàìåòðîâ ïîðòà
        SetCommTimeouts(port,&ct);                      // óñò âðåìåííûõ èíòåðâàëîâ
        PurgeComm(port,PURGE_TXCLEAR|PURGE_RXCLEAR);;   // îáíóëåíèå áóôåðà ïîðòà
        SetupComm(port,256,256);                        // ïåðåäà÷à ïàðàìåòðîâ â ïîðò

        SetCommMask(port,EV_RXCHAR);                    // óñò ìàñêè ôëàãà - ïðèíÿò áèò

        ovr.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
     
        ReadFile(port, buf_in, NumBait, &bc, &ovr);    // çàïóñê ÷òåíèÿ
       }
}

//--------------------------- ×òåíèå äàííûõ îò bluetooth  ----------------------

void __fastcall TForm1::Timer2Timer(TObject *Sender)
{

if(WaitForSingleObject(ovr.hEvent, READ_TIMEOUT) == WAIT_OBJECT_0){//åñò äàííûå ?
                flag_djw = true;
                GetOverlappedResult(port,&ovr,&bc,FALSE);       // ïîëó÷åíèå äàííûõ
                PurgeComm(port,PURGE_RXCLEAR);                  // îáíóëåíèå áóôåðà ïîðòà
                ReadFile(port, buf_in, NumBait, &bc, &ovr);     // çàïóñê ÷òåíèÿ
                }
}

//-----------------------------Çàïóñê / ïåðåçàïóñê ñâÿçè -----------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{

 if(!Port_Enabled)
  {
    numT++;

    Label2->Caption = " BLT íå ïîäêëþ÷åí";
    Label2->Color=clRed;
    Label2->Width = 300;

    OpenComPortRead();                          // ïîïûòêà îòêðûòü com  ïîðò

    if(Port_Enabled){
        Timer2->Enabled=true;
        Label1->Caption = " Ïîðò îòêðûò";
        Timer1->Interval=2000;
        numT=0;
        }
   }
 else
  {
   if(flag_djw){                                  // èíäèêàòîð ñâÿçè
        Label2->Caption = " BLT ïîäêëþ÷åí";
        Label2->Color=clSkyBlue;
        Label2->Width = 300;
        }
   else  {
         Label2->Color=clRed;
         Label2->Caption = " BLT íå ïîäêëþ÷åí";
         Label2->Width = 300;

         CancelIo(port);
         CloseHandle(port);
         CloseHandle(ovr.hEvent);

         Port_Enabled =false;
         Timer2->Enabled=false;
         Label1->Caption = " Ïîðò çàêðûò";
         Timer1->Interval=300;
        }

   flag_djw = false;            // ñáðîñ ôëàãà ñâÿçè ñ BLT
  }

   Label3->Caption = IntToStr(numT);

}

//---------------------------------------------------------------------------
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 10-02-2014 06:39 » 

Цитата: whale2
Я не пойму мы чего обсуждаем то ? )
Как написать одно и тоже но разными методами ? Смысл в этом будет ?
Ну если б ты мог написать своим методом, ты бы не создал тему. А так, конечно, хозяин - барин: можешь упорствовать дальше.

Поиск понятен, когда метод единственный. Но когда есть варианты, не опробовать их и ковыряться неделю с одним - это за пределами моего понимания.

Цитата: whale2
тормозит функция CancelIo(port); - порядка 10-15 секунд
Ну тормозит и тормозит - так Windows работает. Однако у многих функций WinAPI есть дублёры с суффиксом "Ex", имеющие большее количество параметров и позволяющие делать более тонкие настройки.

Главная интрига же, конечно, заключается в том, зачем вообще закрывать порт до завершения работы программы?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
whale2
Читатель

ru
Offline Offline

« Ответ #19 : 10-02-2014 07:58 » 

Я же говорил в самом начале что связь пропадает. и восстановить ее получается только так.
Еще раз - подключаемся к вирт порту bluetoothза, все отлично данные идут, отходим с дивайсом на 100м связь по радио пропадает данные не идут, далее ничего не делаем, подходим ближе данные опять не идут, пойдут только если закрыть и открыть порт заново.
Если кто предложит идею как восстанавливать связь другим способом буду безмерно благодарен.
 
Записан
whale2
Читатель

ru
Offline Offline

« Ответ #20 : 10-02-2014 08:21 » 

Я так понимаю если винда видит что bluetooth уст-во нет на связи она вирт сом порт удаляет из системы а затем восстанавливает при возобновлении связи вот этот момент когда порт исчезает и появляется вновь и надо как-то обыграть автоматически.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 10-02-2014 09:27 » 

Цитата: whale2
Я так понимаю если винда видит что bluetooth уст-во нет на связи она вирт сом порт удаляет из системы
Я вот не понимаю, зачем гадать, когда можно проверить: есть порт в диспетчере устройств или его нет при наличии и отсутствии термометра в пределах видимости.

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

Кроме того, тебя спрашивали: обрабатываешь ли ты коды ошибок, возвращаемые функциями. Судя по коду - нет. Read вызывается вне зависимости от работы других функций, возвращённый Read результат не исследуется на корректность и полноту. GetLastError не анализируется.

Т.е. исследования всех условий работы системы ты не провёл, информации не имеешь. И твои действия выглядят как метод тыка: вместо попыток разобраться и понять, что происходит, ты ищешь такую "волшебную палочку", чтобы её вставить, и всё заработало. Это называется шаманством.

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

Поэтому я даже и не знаю, что тут обсуждать. Ну понятно, что ты хочешь, чтобы кто-то тут сел и написал тебе готовый код, который бы ты себе вставил и побежал дальше заниматься своими делами. Но, во-первых, очень мало у кого есть термометр для отладки, во-вторых, с какой стати кто-то будет за тебя тратить время на разработку? Советов, как реорганизовать свою работу, ты не слушаешь - типа, сам лучше знаешь.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
whale2
Читатель

ru
Offline Offline

« Ответ #22 : 10-02-2014 14:04 » new

Dimka
я так понял вы сюда потрындеть зашли, у меня к вам большая просьба, не пишите сюда больше ничего, не надо, обойдусь без вашим советов как-нибудь, самоутверждайтесь где нибудь в другом месте иначе нарветесь на грубость.
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #23 : 10-02-2014 20:26 » 

whale2, ты имеешь представление об отладке приложений?

У тебя по сути, то что предлагает Dimka, консольное приложение.
Отследить готовность порта (виртуального, или "железного")
То как система работает с портом неизвестно никому, и  знать не нужно Жаль

Цитата
Тебя поток как таковой, похоже, не интересует, раз ты равнодушно относишься к пропаданию сигнала. А это значит, что можно использовать шаблон проектирования "доска объявлений". Нить чтения потока из порта в критической секции пишет в общую, разделяемую между нитями переменную - доску объявлений - структуру с информацией. Туда можно добавить поле даты и времени - момента обновления. Основная нить программы в той же критической секции читает доску в произвольном темпе и видит там всегда самую последнюю из дошедших записей. Дальше уж сама решает, что с этой записью делать: обрабатывать, пропускать повторы и устаревшие значения и т.д.
Что тебя здесь не устраивает?

Вполне рабочее предложение, и, грубо, единственно верное.


Хамить, конечно, можно... но не в этом случае.

Причем Улыбаюсь
Код:
comport="Com5";
Упс... жесткая привязка к виртуальному порту. А если порт изменится?

На момент отладки, я, соглашусь, удобно привязаться к конкретному порту, но на момент релиза... - спорно и да же вредно.

Цитата
Я так понимаю если винда видит что bluetooth уст-во нет на связи она вирт сом порт удаляет из системы а затем восстанавливает
Что это меняет? Видит или не видит. Занят или не занят. Разрешен IO или запрещен(занят).
Да?

Ну так включай отладку, развивай ситуацию, строй тестовые последовательности = думай.
« Последнее редактирование: 10-02-2014 20:32 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines