Home > Back-end >  Multi-threaded read a serial port and write database crash problem, warrior who help me
Multi-threaded read a serial port and write database crash problem, warrior who help me

Time:10-19

BCB6 + sql2000, I opened the 80 threads, read serial data, and then save to the database, 500 milliseconds to write data at a time, each serial port a table, in the first few hours, memory not seen obvious growth, but in 20 hours after the operation, the machine memory footprint is too high, the machine directly die,
Excuse me, is this how to return a responsibility??
The warrior to help,

CodePudding user response:

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

#include
# pragma hdrstop

# include "ThreadReceiveData. H"
# include "ClassComm. H"

#include

# include "ClassConfigInfoRW. H"
# include "is the main. H"
# include "stdio.h"

//# include & lt; ADODB. Hpp>
//# include & lt; DB. Hpp>

# pragma package (smart_init)
//-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

//Important: the Methods and the properties of objects in the VCL can only be
//2 in a method called using the Synchronize, for example:
//
//the Synchronize (UpdateCaption);
//
//the where UpdateCaption could look like:
//
//void __fastcall TThreadReceiveData: : UpdateCaption ()
//{
//Form1 - & gt; Caption="Updated in a, thread".
//}
//-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

__fastcall TThreadReceiveData: : TThreadReceiveData (bool CreateSuspended)
: TThread (CreateSuspended)
{
}
//-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
__fastcall TThreadReceiveData: : TThreadReceiveData (DEVCONFIGINFO thrd_devConfigInfo, int thrd_devIndex, bool CreateSuspended)
: TThread (CreateSuspended)
{
FreeOnTerminate=true;

ClassComm=new TClassComm ();

DevConfigInfo=thrd_devConfigInfo;
DevIndex=thrd_devIndex;

Int portnum baudrate, parity, stopbits;

Portnum=devConfigInfo. PCInfo [devIndex] portnum;
Baudrate=devConfigInfo. PCInfo [devIndex] baudrate;
Parity=devConfigInfo. PCInfo [devIndex]. Parity;
Stopbits=devConfigInfo. PCInfo [devIndex] stopbits;

ClassComm - & gt; InitPort (portnum baudrate, parity, stopbits);
}
//-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Void __fastcall TThreadReceiveData: : Execute ()
{
//- Place thread code here -
Unsigned char receive_buf [2048].
Unsigned char history_receive_buf [2048].
Unsigned short count, len;
AnsiString str_tablename;

AnsiString str_data [2].

AnsiString str_sql;

Str_data [0]="";
Str_data [1]="";

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



CoInitialize (NULL);

ADOConnection=new TADOConnection (ADOConnection);
ADOCommand=new TADOCommand (ADOCommand);

ADOConnection - & gt; The ConnectionString="Provider=SQLOLEDB. 1; Integrated Security=SSPI; Persist Security Info=False; Initial Catalog=JZMSDB; Data Source=ZHANGSONG ";
ADOConnection - & gt; LoginPrompt=false;

ADOCommand - & gt; The Connection=ADOConnection;

ADOConnection - & gt; The Open ();

Str_tablename="Table_Data" + IntToStr (devIndex) + "_", Now () the FormatString (" YYYYMMDDhhmmss ");
Str_tablename str_sql="CREATE TABLE" + + "(ID bigint identity (1, 1) not null, primary key, recordTime DATETIME, sdata char (32))";
ADOCommand - & gt; CommandText=str_sql;
ADOCommand - & gt; The Execute ();



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

Len=0;

ReceiveData. ReceiveCnt [0]=0;
ReceiveData. ReceiveCnt [1]=0;

Do {
ReadWriteGuard - & gt; Acquire ();
The count=ClassComm - & gt; ReceiveData (receive_buf);
ReadWriteGuard - & gt; Release ();

for(int i=0; i{
+ len history_receive_buf [I]=receive_buf [I];
}

Len +=count;

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

Int k=0;
While (len & gt;=8)
{
If (history_receive_buf [k]==0 XFF)
{
If (k==7)
{
Str_data [history_receive_buf [0] & amp; 0 x01]="";
For (int dindex=0; Dindex<8; Dindex++)
{
ReceiveData. Databuf [history_receive_buf [0] & amp; 0 x01] [dindex]=history_receive_buf [dindex];

Str_data [history_receive_buf [0] & amp; 0 x01] +=HexToAnsiString (history_receive_buf [dindex]);
}
ReceiveData. ReceiveCnt [history_receive_buf [0] & amp; 0 x01] + +;

Col_1=10;
* devIndex row_1=2 + 1 + (history_receive_buf [0] & amp; 0 x01);

Col_2=11;
* devIndex row_2=2 + 1 + (history_receive_buf [0] & amp; 0 x01);

Ss [0]=str_data [history_receive_buf [0] & amp; 0 x01];
Ss [1]=ReceiveData. ReceiveCnt [history_receive_buf [0] & amp; 0 x01];

The Synchronize (DisplayData);

//-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- save data -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

Str_tablename str_sql="insert into" + + "(recordTime sdata) VALUES ('" + Now () the FormatString (" MM - DD YYYY - hh: MM: ss ") + "', '" + str_data [history_receive_buf [0] & amp; 0 x01] +" ") ";
nullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnull
  • Related