delphi编程:多线程参数传递,收不到返回值,为什么?

unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,F... unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

Test=record
a: Integer;
b: Integer;
end;

var
Form1: TForm1;

implementation

var
som:string; //全局变量

{$R *.dfm}

procedure MyThreadFun(var Pa: Test); stdcall;
begin
som := IntToStr(Pa.a+Pa.b);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Id: Dword;
P: test;
begin
som:=''; //全局变量清空
p.a:=5000;
p.b:=1000;
Createthread(nil, 0, @MyThreadFun, @p, 0, Id);
memo1.Text:=som;
end;

end.

正在学习线程,调试一个程序,程序能运行,但是memo1中不显示两个数相加的和。。。问题出在哪儿,如何修正???谢谢。。
展开
 我来答
Sephil
2015-12-17 · 知道合伙人IT服务行家
Sephil
知道合伙人IT服务行家
采纳数:616 获赞数:1036
熟悉常用语言和数据库,爱写代码

向TA提问 私信TA
展开全部
Createthread(nil, 0, @MyThreadFun, @p, 0, Id); // 创建线程,注意这里不是阻塞的,启动线程后就直接执行下一句代码了

memo1.Text:=som; // 执行时上面那个线程可能还没执行结束
你可以理解为,线程中的代码和 memo1这句是同时执行的,所以som的结果并不可预知

thread := Createthread(nil, 0, @MyThreadFun, @p, 0, Id);
WaitForSingleObject(thread) // 等待线程执行结束
memo1.Text:=som; // 这样就对了,但失去了多线程的意义
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式