我现在的程序接收和发送都好使
我是这样的,能接收的时候不能发,发的时候不能接收
我的接收是用一个线程来接收的.我想让程序在接收的同时能够发送数据!!!希望各位提出宝贵意见以及思路.
有代码者最佳!!!
我是这样的,能接收的时候不能发,发的时候不能接收
我的接收是用一个线程来接收的.我想让程序在接收的同时能够发送数据!!!希望各位提出宝贵意见以及思路.
有代码者最佳!!!
解决方案 »
- 循环问题,大哥们帮忙看看 急
- 软件wise 打包问题!
- 请教高手,如何将WORD和EXCEL文档保存到SQL数据库里面?
- 我用DBGRID显示IBQuery查询所得的记录,返回记录数太多,导致Out Of Memory!如何解决?!
- 帮忙解决一下硬件中断读取数据的问题。
- 关于DirectShow播放文件列表的问题
- 高分等待:哪位高手能指点一下有关 Delphi 读写并口的方法!资料 等待中...
- 关于TBlobField字段的存取?请教高手!!1
- 我真的想不出来了------关于打印的字体设置的问题;
- 怎么才能在dbgrid 中**双击**其中一格(cell),读取该cell的内容,显示在EDIT中
- 帮帮看看错在哪里了~~~~~~~~~~~~`
- 求助!我是新手.关于List释放问题.
--------------------------------------------------------------
程序,犹如人生。
我的接收消息事件跟发送事件都在主线程,会不会有问题的.
我见到的一个例子大概是这样的:
初始化时创建监视线程来捕获消息WM_COMMNOTIFY ,当有数据过来时,就进入消息处理事件,现在是当我用另一台机器定时发送数据时,我这里不能发送给另一台机器!
我的代码:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;const
WM_COMMNOTIFY=WM_USER+1; //通信消息type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
ComboBox1: TComboBox;
Memo1: TMemo;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
procedure WMCOMMNOTIFY(var Message:TMessage);
message WM_COMMNOTIFY;
{ Private declarations }
public { Public declarations }
end;var
Form1: TForm1;
hNewCommFile,Post_Event,Post_Event_1:THandle; Receive:boolean;
ReceiveData:Dword;
lpol:poverlapped;
implementation{$R *.dfm}
procedure AddToMemo(str:PChar;len:Dword); //接收显示
var
c:string; i:integer; str1:string;
begin
str[len]:=#0;
c:=strpas(str);
for i:=1 to length(c) do
begin
str1:=str1+inttohex(ord(c[i]),2)+' ';
end;
Form1.Memo1.Lines.Add(str1);end;
procedure CommWatch(Ptr:Pointer);stdcall; //监视线程
var
dwEvtMask:Dword;
begin
FillChar(lpol,sizeof(toverlapped),0);
while true do
begin
dwEvtMask:=0;
if WaitCommEvent(hNewCommFile,dwEvtMask,lpol) then
begin
WaitForSingleObject(Post_event,INFINITE);
ResetEvent(Post_Event);
PostMessage(Form1.Handle,WM_COMMNOTIFY,0,0);
end;
end;
end;procedure TForm1.WMCOMMNOTIFY(var Message: TMessage); //消息 处理时间
var
CommState:ComStat;
dwNumberOfBytesRead:Dword;
ErrorFlag:Dword;
InputBuffer:array[0..1024] of char;
begin
if not ClearCommError(hNewCommFile,ErrorFlag,@CommState) then
begin
MessageBox(0,'ClearcommErro!','Notice',MB_OK);
PurgeComm(hNewCommFile,Purge_Rxabort or Purge_Rxclear);
exit;
end;
if(Commstate.cbInQue >0) then
begin
ReadFile(hNewCommFile,InputBuffer,CommState.cbInQue,dwNumberOfBytesRead,lpol) ;
AddToMemo(InputBuffer,dwNumberOfBytesRead);
SetEvent(Post_Event);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);//接收按钮事件
var
com_thread:Thandle;
ThreadId:DWORD;
begin
Post_Event:=CreateEvent(nil,true,true,nil);
Com_Thread:=CreateThread(nil,0,@CommWatch,nil,0,ThreadID);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
DCB:tdcb;
begin
hNewCommFile:=CreateFile('COM1',GENERIC_WRITE,0,nil,OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,0);
if hNewCommFile=INVALID_HANDLE_VALUE then
MessageBox(0,'Error opening com port!','Notice',MB_OK);
SetupComm(hNewCommFile,1024,1024);
GetCommState(hNewCommFile,dcb);
dcb.BaudRate:=9600;
dcb.ByteSize:=8;
dcb.Parity:=NOPARITY;
dcb.StopBits:=ONESTOPBIT;
SetCommState(hNewCommFile,dcb) ;
SetCommMask(hNewCommFile,ev_rxchar);
end;procedure TForm1.Button5Click(Sender: TObject); //发送按钮
var
Write_Os:Toverlapped;
x1:array[0..4] of byte;
dwNumberOfBytesWritten:DWORD;
begin
fillchar(Write_Os,sizeof(Write_Os),0);
X1[0]:=$81;
X1[1]:=$13;
X1[2]:=$F0;
X1[3]:=$81;
X1[4]:=$05;
WriteFile(hNewCommFile,X1,5,dwNumberOfBytesWritten,@Write_Os);
SetEvent(Post_Event_1);
end;
end.
我的程序有很多不安全因素,我现在主要想实现功能,2台电脑同时对发,谁给你修改修改
谢谢