Y
YuD
Unregistered / Unconfirmed
GUEST, unregistred user!
各位好:
我第一次接触多线程的程序,遇到个奇怪的现象(可能是线程哪里有问题,我没有发现),在主线程中发送数据正常,可是在子线程里发送出的数据就不正常了.我是头一次接触多线程,可能程序中存在大问题,没有发现.请精通的朋友们指点.下面是程序部分代码.
控件:spcomm 串口:com1 波特率:9600 其他:默认
主程序中的过程
Procedure Tfrm_DataService.NetSendToComm(const S:WideString;ASockID:Integer);
var
pSchar;
i:integer;
sSend:String;
sRec:string;
stemp:String;
begin
sRec:=s;
if UpperCase(copy(sRec,1,10))<>'MOBITODATA' then
sSend:='BANKTODATA'+format('<%d>',[ASockID])+sRec //银行发送的数据
else
begin //手持机发送的数据
stemp:=copy(sRec,1,10);
delete(sRec,1,10);
sSend:=stemp+format('<%d>',[ASockID])+sRec;
end;
ps:=pchar(sSend);
i:=length(sSend);
comm1.WriteCommData(ps,i); //串口写数据
sleep(10);
TSendDataFromCom.Create(sSend); //调用线程发送
end;
线程里的过程
procedure TSendDataFromCom.Execute;
var
pSchar;
i:integer;
begin
EnterCriticalSection(FClientCS);
try
ps:=pchar(FSend); //FSend位接收sSend的数据
i:=length(FSend);
frm_DataService.comm1.WriteCommData(ps,i); //串口写数据
frm_DataService.mem_cx.Lines.Append(FormatDateTime('yyyy-MM-dd HH:mm:ss',now)+' : '+' > '+FSend);
finally
sleep(10);
LeaveCriticalSection(FClientCS);
end;
end;
比如我发送'1122334455667788990'字符串,通过主线程发送的接收就正常,通过子线程发送的接收就是一个 'B'.我不知道为什么会这样??
我第一次接触多线程的程序,遇到个奇怪的现象(可能是线程哪里有问题,我没有发现),在主线程中发送数据正常,可是在子线程里发送出的数据就不正常了.我是头一次接触多线程,可能程序中存在大问题,没有发现.请精通的朋友们指点.下面是程序部分代码.
控件:spcomm 串口:com1 波特率:9600 其他:默认
主程序中的过程
Procedure Tfrm_DataService.NetSendToComm(const S:WideString;ASockID:Integer);
var
pSchar;
i:integer;
sSend:String;
sRec:string;
stemp:String;
begin
sRec:=s;
if UpperCase(copy(sRec,1,10))<>'MOBITODATA' then
sSend:='BANKTODATA'+format('<%d>',[ASockID])+sRec //银行发送的数据
else
begin //手持机发送的数据
stemp:=copy(sRec,1,10);
delete(sRec,1,10);
sSend:=stemp+format('<%d>',[ASockID])+sRec;
end;
ps:=pchar(sSend);
i:=length(sSend);
comm1.WriteCommData(ps,i); //串口写数据
sleep(10);
TSendDataFromCom.Create(sSend); //调用线程发送
end;
线程里的过程
procedure TSendDataFromCom.Execute;
var
pSchar;
i:integer;
begin
EnterCriticalSection(FClientCS);
try
ps:=pchar(FSend); //FSend位接收sSend的数据
i:=length(FSend);
frm_DataService.comm1.WriteCommData(ps,i); //串口写数据
frm_DataService.mem_cx.Lines.Append(FormatDateTime('yyyy-MM-dd HH:mm:ss',now)+' : '+' > '+FSend);
finally
sleep(10);
LeaveCriticalSection(FClientCS);
end;
end;
比如我发送'1122334455667788990'字符串,通过主线程发送的接收就正常,通过子线程发送的接收就是一个 'B'.我不知道为什么会这样??