Delphi线程问题。急!急!急!急!(100分)

  • 主题发起人 主题发起人 cardinalzbk
  • 开始时间 开始时间
C

cardinalzbk

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个dll,里面要调用一个线程读注册表。要把读出来的值返回到主线程,应该怎么做呢?下面是代码。多谢各位高手了。救兄弟一命!
function TdTmifvalid():boolean;
var
result_string:string;
Tresult_str:Treadreg;
begin
Tresult_str:= Treadreg.Create(false);
Tresult_str.FreeOnTerminate:=true;
result_string:=Tresult_str.temp_result_string;
end;

下面是线程
unit readreg;
interface
uses
Classes,Registry,Windows;
type
Treadreg = class(TThread)
private
{ Private declarations }
procedure ShowValue;//
protected
procedure Execute;
override;
public
temp_result_string:string;

end;

const
RegRoot: Cardinal = HKEY_CURRENT_USER;
RegKeyPath = 'Software/Classes/CLSID/{CD546EDB-A86C-44FE-8C95-6C8E97DB9707}';
RegEntryName = 'LastPostion';
// intended misspelling for easier
implementation
procedure Treadreg.Execute;
begin
{ Place thread code here }
with TRegistry.Createdo
try
RootKey:=RegRoot;
if OpenKey(RegKeyPath,true) then
temp_result_string:=ReadString(RegEntryName);
finally
Free;
end;

end;

end.
不知道可以用Synchronize不可以。如果不是在dll下我知道怎么用Synchronize,现在不知道了。
 
Synchronize不是一样用吗?
>>把读出来的值返回到主线程
可以用回调函数。
 
zw84611,能告诉我具体怎么用吗?谢谢了。
 
要是我的话,我会在线程 DLL里用 New在堆中开一片内存,把数据放在内存中,然后线程用SendMessage或PostMessage把这个内存的指针发给主线程,然后主线程用完后,负责释放这片内存
 
哈哈,再简单一点喇,写到暂时文件里面去
 
准确地说,是写到内存映射文件中
 
这几天正在看消息的东西,认为 fanta 的主意比较不错
 
这个线程函数只有一个线程运行时肯定没问题,
如果多程序调用该dll文件,或者说时有多个线程
在运行,那么,返回值属于临界资源,必须互斥访问.
 
后退
顶部