我在Button.Click事件中进行了Comm1.Write的操作,为什么只有等到程序执行完了Button.Click事件,才触发了Comm1.ReceiveData事件了,有没有办法在Button.Click中就能接收数据了!~~~部分程序如下
procedure TForm1.SendData_ButtonClick(Sender: TObject);
var buffer:string;
begin
ReadChar(Comm1,256,2,pchar(buffer));
//Comm1为spcomm,256为起始地址,2为读取数据长度,读的数据存到buffer中。
end;
procedure TForm1.SendData_ButtonClick(Sender: TObject);
var buffer:string;
begin
ReadChar(Comm1,256,2,pchar(buffer));
//Comm1为spcomm,256为起始地址,2为读取数据长度,读的数据存到buffer中。
end;
Application.Processmessages;
Sleep(100);
这个问题是有的,发送的过程结束之后才会执行其他的事件过程,我现在也有同样的困惑,不过你说的哪个问题,我在应用程序里用其他变通的方法给处理了,我现在有一个问题是,在DLL里处理发送数据,接收不好处理了,而且,需要在VB,VC里调用这个DLL,他们可能没有SPCOMM,呵呵,不知道到底怎么处理了,
试试
Application.Processmessages;
Sleep(100);这种方法我以前也尝试过了,只是它也是执行完这个过程才会去执行其他的过程,不过我没尝试用GOTO语句,估计GOTO可以,但我不敢贸然使用,
楼主也找一种变通的方法把
sleep(50);
然后再去跳转可以不?对了,有人知道,什么情况下才可以触发COMM的接收事件不?
我开始也象你一样,想用Dll来实现串口数据的读写,但是如果在其中用spcomm我觉得不好写就没有用Dll了。我想要用Dll的话就应该使用api函数来实现功能了(一家之言哈。)我对api不熟,帮不了你了!~
Application.Processmessages是什么意思?这样就能发送命令和接收数据同步执行了吗?
getit911(Windows转Linux中) :
你说spcomm本身就是多线程,可体现在哪里?还有,我看有的帖子说,可以让spcomm的缓冲区达到一定大小后再一起接收数据,还可以改变缓冲区的大小,这个是怎么实现的?
你看spcomm的代码,你就会知道为什么他是多线程的了。