** 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 |
|