菜鸟问题:关于线程。请各位高手帮帮忙。

csdncjp3 2003-09-29 10:22:14
procedure TForm7.Button7Click(Sender: TObject);
var
hthread:thandle;
threadid:dword;
begin
hthread:=createthread(nil,0,@rasdial1,nil,0,threadid);
end;
其中rasdial1为一个函数。编译时报错第4个参数不能为空。
谁能帮我解释createthread函数。

...全文
77 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
rwdx 2003-09-29
  • 打赏
  • 举报
回复
建议使用delphi的线程类
//////
type TCpa=RECORD
Cb_p,Cb_n:TComboBox;
end;

//////

function Faddress(var cpa:TCpa):dword;stdcall;
begin
try
address.Filter:='';
address.Filtered:=false;
address.First;
if cpa.cb_p=cpa.cb_n then begin
cpa.Cb_p.Items.Clear;
while not address.Eof do begin
cpa.cb_p.Items.Add(address.FieldByname('c'+copy(cpa.Cb_p.Name,2,length(cpa.Cb_p.Name))).AsString);
address.Next;
end;
end
else begin
cpa.cb_n.Items.Clear;
address.Filter:='c'+copy(cpa.Cb_p.Name,2,length(cpa.Cb_p.Name))+'='''+cpa.Cb_p.Text+'''';
address.Filtered:=true;
while not address.Eof do begin
cpa.cb_n.Items.Add(address.FieldByname('c'+copy(cpa.Cb_n.Name,2,length(cpa.Cb_n.Name))).AsString);
address.Next;
end;
end;
except
end;
result:=0;
end;
csdncjp3 2003-09-29
  • 打赏
  • 举报
回复
谢谢,没问题了
csdncjp3 2003-09-29
  • 打赏
  • 举报
回复
线程里面不能调用控件吗?怎么办?
snowfog 2003-09-29
  • 打赏
  • 举报
回复
为什么不试试我的答案???
csdncjp3 2003-09-29
  • 打赏
  • 举报
回复
解决了,谢谢
rwdx 2003-09-29
  • 打赏
  • 举报
回复
hthread:=createthread(nil,0,@rasdial1,//在这里写上你的要传入线程函数的参数的地址,0,threadid);
csdncjp3 2003-09-29
  • 打赏
  • 举报
回复
放外部也不行啊。
csdncjp3 2003-09-29
  • 打赏
  • 举报
回复
那我错在那里?
rwdx 2003-09-29
  • 打赏
  • 举报
回复

var
hthread:thandle;
threadid:dword;
放在外部声明看看,也就是全局声明
rwdx 2003-09-29
  • 打赏
  • 举报
回复
hthread:=createthread(nil,0,@rasdial1,nil//在线程函数没有参数的情况下,这里是可以为空指针的,0,threadid);
csdncjp3 2003-09-29
  • 打赏
  • 举报
回复
线程:function rasdial1(p:pointer):longint;stdcall;
rwdx 2003-09-29
  • 打赏
  • 举报
回复
贴出你的线程函数的声明部分
snowfog 2003-09-29
  • 打赏
  • 举报
回复
我又试了一下,这么写是对的:
procedure TForm7.Button7Click(Sender: TObject);
var
hthread:thandle;
threadid:dword;
Param: ^Integer;
begin
hthread:=createthread(nil,0,@rasdial1,Param,0,threadid);
end;
csdncjp3 2003-09-29
  • 打赏
  • 举报
回复
一样的错误,谁有例子吗?
snowfog 2003-09-29
  • 打赏
  • 举报
回复
这么写
procedure TForm7.Button7Click(Sender: TObject);
var
hthread:thandle;
threadid:dword;
Param: Integer;
begin
hthread:=createthread(nil,0,@rasdial1,@Param,0,@threadid);
end;
rwdx 2003-09-29
  • 打赏
  • 举报
回复
你的线程函数使用了什么参数?
csdncjp3 2003-09-29
  • 打赏
  • 举报
回复
再试
csdncjp3 2003-09-29
  • 打赏
  • 举报
回复
还是第四个参数出现variable required.错误
snowfog 2003-09-29
  • 打赏
  • 举报
回复
对了,第四个参数你必须给定一个指针,为了将某个参数传递到线程函数(rasdiall)中。
线程函数function rasdiall(Parameter: Pointer): Integer; stdcall;其中第四个参数要传递到Parameter。
csdncjp3 2003-09-29
  • 打赏
  • 举报
回复
试试
加载更多回复(2)

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧