while 语言的语问题??? ( 积分: 100 )

  • 主题发起人 主题发起人 tarzar
  • 开始时间 开始时间
T

tarzar

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TF_power.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
count,data :integer;
data_head :integer;//用来放'X'($58)
begin
move(buffer^,Receive_Buff,BufferLength);//把接收到的数据放Recive_Buff绶冲区中,move是system库的过程
//BufferLength接收的字符的长度
Receive_Main_Count := Receive_Main_Count + BufferLength;//主指针计数

//只要收到的数有大于一包数据的长度,就处理
while (Receive_Main_Count >= PACK_LEN ) do子 //PACK_LEN 是常数9
begin
//找数据包的头
for count:=1 to Receive_Main_Count do
begin
data_head := Receive_Buff[count];
Receive_Main_Count := Receive_Main_Count - 1;
if(data_head = $58)then
break;
end;
//取数据包
Data_Buff[1] := data_head;
for count := 2 to 9 do
begin
Data_Buff[count] := Receive_Buff[count];
end;
show_to_Receive_Memo;//显示到memo
data_of_receive_process;//数据处理
Receive_Main_Count := Receive_Main_Count - 8;
end;
end;

这是SPComm串行通信控件的接收事件

我想的问题:
我它接收到一串七个字符时,,则进入该事件

按程序来看,,Receive_Main_Count >= PACK_LEN 应该为假,,所以按这段程序的流程应该是退出才对但它却没有,而是跳去执行<data_of_receive_process;//数据处理>这一过程
 
procedure TF_power.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
count,data :integer;
data_head :integer;//用来放'X'($58)
begin
move(buffer^,Receive_Buff,BufferLength);//把接收到的数据放Recive_Buff绶冲区中,move是system库的过程
//BufferLength接收的字符的长度
Receive_Main_Count := Receive_Main_Count + BufferLength;//主指针计数

//只要收到的数有大于一包数据的长度,就处理
while (Receive_Main_Count >= PACK_LEN ) do子 //PACK_LEN 是常数9
begin
//找数据包的头
for count:=1 to Receive_Main_Count do
begin
data_head := Receive_Buff[count];
Receive_Main_Count := Receive_Main_Count - 1;
if(data_head = $58)then
break;
end;
//取数据包
Data_Buff[1] := data_head;
for count := 2 to 9 do
begin
Data_Buff[count] := Receive_Buff[count];
end;
show_to_Receive_Memo;//显示到memo
data_of_receive_process;//数据处理
Receive_Main_Count := Receive_Main_Count - 8;
end;
end;

这是SPComm串行通信控件的接收事件

我想的问题:
我它接收到一串七个字符时,,则进入该事件

按程序来看,,Receive_Main_Count >= PACK_LEN 应该为假,,所以按这段程序的流程应该是退出才对但它却没有,而是跳去执行<data_of_receive_process;//数据处理>这一过程
 
怎么没人回答我啊,???


自已顶一下!!!!
 
帮你顶下,我也学习一下。
 
procedure TF_power.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
事件涉及到多线程问题,在这里设置了断点,未必查看到真实的执行流程情况.
不用怀疑 while do 执行情况,他绝对会按 while ture do 执行,反之不执行!
 
你说的什么意思呢?
Receive_Main_Count >= PACK_LEN 为什么是假呢?
 
回:decade
你所说的:事件涉及到多线程问题
是不是指这个串口本身有多程线啊??
在我程序里,没有用多线程,我处理数据是直接在接收事件里处理的

回:delphilxh
当接收的字符个数有可能少于9嘛,所以有可能为假,,,!!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部