我在开发系统的时候,遇到了一个关于线程的问题!!!(30分)

  • 主题发起人 主题发起人 fxh7622
  • 开始时间 开始时间
F

fxh7622

Unregistered / Unconfirmed
GUEST, unregistred user!
在我的程序中需要通过网络给另一个机器发送消息,我想让这种发送在线程中完成,这样就不会影响主程序的运行了,我的代码是这样的:
pTheadMsg.pUserID:=UserID.Caption;
pTheadMsg.AConn:=ConnectADO;
CallThread := ThreadClient.Create(false,pTheadMsg);
CallThread.Destroy;
可是却发现的确是通过线程发送的,但是发送的过程主线程什么事情也不能做,不知道这是为什么 呢????
 
代码贴出来看看
 
就是上面的代码呀!!!然后是一个线程的类呀。没有别的了
 
线程的代码贴出来
 
將代碼貼出來看看能不能幫你幫。
 
我的代码是这样的:
tagTheadClient = record //强制下机使用的结构
pCardID:Pchar;
pComputerIP: Pchar;
//要强制机器的IP
AConn: TADOConnection;
end;
TTheadMsg = tagTheadClient;
PTheadMsg = ^tagTheadClient;
.....
tMsg:TTheadMsg;
tMsg.pComputerIP:=Pchar(ComName);
tMsg.AConn:=ConnectADO;
tMsg.pCardID:=Pchar(RefView.Items.Item.Caption);
tTHandle:=createthread(nil,0,@ForceDownNet,tMsg,0,tDword);
线程的实现函数是这样的:
procedure ForceDownNet(pMsg:TTheadMsg);
var
ItemList:TListItem;
ReFlag:Integer;
SQL:String;
//GetMsg:TTheadMsg;
begin
//GetMsg:=pMsg;
ReFlag:=DownPCIP(pMsg.pComputerIP);
end;

可是我再线程中设置断点的时候总是提示说pMsg.pComputerIP为空。这是为什么呢???
 
有没有人帮助我呢??
 
----> CallThread.Destroy;
毛病在这。
Destroy时会等待线程执行结束,呵呵。
所以你的代码和主线程调用CallThread.Execute没区别。
起始主线程只要执行CallThread := ThreadClient.Create(false,pTheadMsg);就可以返回了。至于CallThread的释放可以让线程自己来执行(最简单就是设置FreeOnTerminate:=True)
 
后退
顶部