procedure TForm1.Button6Click(Sender: TObject); var ID : Dword; begin CreateThread(nil,0,@MyFun,Memo1.Lines,0,ID); end;function MyFun(P:Pointer):Dword;StdCall; var I ,y : integer; strings : TStrings; begin I := 0; strings := Tstrings(P); while true do begin if I > 100 then Exit; strings.Add(IntToStr(I)); Inc(I); end; end;如果lz要直接用api操作看下上面这个列子,你要错做那个组件直接传到线程函数里面。 但是建议lz用delphi的TTHread类,用法和楼上这么仁兄说的一样。Synchronize(主线程中的方法)
procedure TThreadA.synchronizeMethod();
begin
//访问Form1的Button1控件
form1.Button1.Enable=True;
end;//线程主函数,访问同步函数
Procedure TThreadA.Execute();
begin
Synchronize(synchronizeMethod)
end;再有不明白的查你的Delphi 的帮助手册,在“索引”中输入“Synchronize method”,它的内容非常详细,并且有例子。
建议楼主下次这类问题还是先查资料,如果不明白再提问吧
我在使用form1调用的时候,告诉我使用了调用类方法的方式调用方法,必须实例化之后才可以,这可能是我的代码哪个地方出差错了。
在Form中的变量值是动态的,在线程中能直接同步吗?
procedure TForm1.Button6Click(Sender: TObject);
var
ID : Dword;
begin
CreateThread(nil,0,@MyFun,Memo1.Lines,0,ID);
end;function MyFun(P:Pointer):Dword;StdCall;
var
I ,y : integer;
strings : TStrings;
begin
I := 0;
strings := Tstrings(P);
while true do
begin
if I > 100 then Exit;
strings.Add(IntToStr(I));
Inc(I); end;
end;如果lz要直接用api操作看下上面这个列子,你要错做那个组件直接传到线程函数里面。
但是建议lz用delphi的TTHread类,用法和楼上这么仁兄说的一样。Synchronize(主线程中的方法)
1.首创建线程(发指令)
2.串口接收事件里把数据反馈到界面
[Warning] Unit1.pas(35): Return value of function 'MyFun' might be undefined?
hjkto兄你该不会不知道线程函数吧,你这个玩笑开大了。呵呵
我那上面只是没申明,加个申明就OK了。
如果你认为是错误的,请指教。
2. Synchronize方法我并不推荐!
3.kfcoffe 你的方法,能行,嘿嘿。你这是教人家直接底层写线程。哈哈。用法要教教人家了!