串口通讯中使用多线程,请大侠们施援手。(100分)

  • 主题发起人 主题发起人 asaili
  • 开始时间 开始时间
A

asaili

Unregistered / Unconfirmed
GUEST, unregistred user!
我想单独用一个线程来接收串口数据(字符串),用POSTMESSAGE将接收到的字符串发送到主线程
再显示在窗体的MEMO1中。串口控件用SPCOMM。
小弟刚学不久,对线程和消息理解不够,请大侠们贴点代码或者给我发一个例子。
MAIL:l_on@163.net
多谢大侠们了!!
 
开个BUF,接受线程收到的数据,然后发给MEMO:
postmessage(memo1.handle,yourmessage,0,yourbufpointer)
 
能详细一点吗?
我想POSTMESSAGE应该发给窗体比较好,因为除了显示出来我还想存到数据库中去。
哪位大侠能给我一个完整的代码学习一下。l_on@163.net
 
能详细一点吗?
我想POSTMESSAGE应该发给窗体比较好,因为除了显示出来我还想存到数据库中去。我想用一个
消息处理函数来处理这个消息。
哪位大侠能给我一个完整的代码学习一下。l_on@163.net
 
自定义一个消息
副线程用SENDMESSAGE 发送(postmessage 需要系统等待)
主窗体定义消息处理

要外出。 改日给你例子
 
给你个例子
const WM_RECVDATA = WM_USER + 1;
//Mainform

TMainForm = class(TForm)
...
private
procedure RecvData(var msg: TMessage);message WM_RECVDATA;
...
end;
procedure TMainForm.RecvData(var msg: TMessage);
var
s: string;
begin
s := string(msg.lparam);
memo1.lines.add(s);
//释放内存
dispose(pointer(msg.lparam));
end;
procedure TMainForm.OnCreate(Sender: TObject);
var
threadid: Cardinal;
begin
...
//创建线程
createthread(nil, 0, @CommFunc, nil, 0, ThreadID);
...
end;
//接收线程
function CommFunc(P: Pointer): Longint; stdcall;
var
buf: pchar;
begin
//分配内存
getmem(buf, 1024)
//读串口略
...
...readfile(...);
...
PostMessage(MainForm.Handle, WM_RECVDATA, 0, integer(buf));
end;
 
多人接受答案了。
 
后退
顶部