C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Потоки, Сбой
** jonick
Отправлено: 22.02.2006, 11:34


Не зарегистрирован







Пишу прогу связь устройств через ком-порты с верхним уровнем.
В проге сделал работу каждого порта в оотдельном потоке(нить).
Все работает хорошо без перебоев. Но если я сворачиваю свою форму или открываю другое приложение(форму) поверх своего то почему-то происходит сбой и прога показывает непонятные символы т.е. происходит сбой в связи. Если обратно востановлю форму или закрою все лишние формы не связанные с моей то связь восстанавливается.
Получается если я сверну прогу в трей она потеряет связь с устройством. Как с этим можно бороться?
olegenty
Отправлено: 22.02.2006, 11:43


Ветеран

Группа: Модератор
Сообщений: 2412



код проги надо разбирать.
** jonick
Отправлено: 22.02.2006, 12:40


Не зарегистрирован







Вот работа самого потока
А на главной форме просто отображается Da в Edit
CODE
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Port1.h"
#include "rzb.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
TApdComPort *COMS1;
TComponent *CPR,*Oa,*CPR1,*Oa1;
bool flag=0;
AnsiString Da;
char CC;
//---------------------------------------------------------------------------

__fastcall Port1::Port1(bool CreateSuspended)
       : TThread(CreateSuspended)
{
COMS1 = new TApdComPort(CPR);

Time1=new TTimer(Oa);
Time1->OnTimer=OnTime1;
Time1->Interval=1;
Time1->Enabled=false;

Time2=new TTimer(Oa1);
Time2->OnTimer=OnTime2;
Time2->Interval=33;
Time2->Enabled=false;

}
//---------------------------------------------------------------------------
void __fastcall Port1::Execute()
{
Result();
do
{
EnterCriticalSection(&Form1->CS);
Synchronize(Read);
LeaveCriticalSection(&Form1->CS);
 }
while(!Terminated);
}
//---------------------------------------------------------------------------
void __fastcall Port1::OnTime1(TObject *Sender)
{


COMS1->ComNumber = 4
COMS1->Baud =9600;
COMS1->Parity = pNone;
COMS1->DataBits = 8;
COMS1->StopBits = 1;
COMS1->Open = true;
Time1->Enabled=false;


}
//-----------------------------------
void __fastcall Port1::Result()
{
COMS1->PutChar(0x3A);
 COMS1->PutChar(0x30);
 COMS1->PutChar(0x37);
 COMS1->PutChar(0x30);
 COMS1->PutChar(0x37);
 COMS1->PutChar(0x30);
 COMS1->PutChar(0x30);
 COMS1->PutChar(0x0D);
 COMS1->PutChar(0x0A);
 flag=0;
 Time2->Enabled=true;
}

//-----------------------
void __fastcall Port1::OnTime2(TObject *Sender)
{

if (flag==0)
{
Result();
}
else {
Time2->Enabled=false;
Form1->Memo1->Lines->Add("ERRoR");
}
}
//------------
void __fastcall Port1::Read()
{
flag=1;
if(COMS1->CharReady())
{
Time2->Enabled=false;
CC = COMS1->GetChar();
Da=Da+CC;

   if(CC=='\n')
   {

  Form1->Edit1->Text=Da;
   Da="";
Result();
   }
}
}
//------------


Отредактировано Konstantine — 22/02/2006, 13:45

Вернуться в Вопросы программирования в C++Builder