求教CreateThread创建一个线程的问题.回答正确马上给分.

sea_way 2003-06-16 01:02:14
求教CreateThread创建一个线程的问题.回答正确马上给分.
CreateThread创建一个线程,这个函数如下
Function OpenServer(Connection:TADOConnection):Boolean;
{===========Connect A NET DATABASE====}
begin
Try
Connection.Connected:=True;
OpenServer:=True;
except
OpenServer:=False;
end;
end;
我是这样写的.
hthread:=CreateThread(nil,0,@OpenServer,ADOConnection1,0,ThreadID);
如何才能得到OpenServer的函数返回值逻辑型的呢??
最好请给段代码帮助我理解.谢谢
...全文
64 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
aiirii 2003-06-16
  • 打赏
  • 举报
回复
可否考虑发送消息出去啊?postMessage.
stanely 2003-06-16
  • 打赏
  • 举报
回复
1.线程函数需要有一个32bit长的参数,integer就是,pointer,TObject都是。
2。返回值也是这样的长度。
3.需要声明成stdcall类型的
sea_way 2003-06-16
  • 打赏
  • 举报
回复
好,等一下.如果没有人给更好的方法我就给分.
Xleep 2003-06-16
  • 打赏
  • 举报
回复
同意 linx88(haozi) 的说法,一定要设置一个变量,把你的结果放到里面。其实象你这个问题不用很复杂的同步机制。下面代码可能绑到你。
var
ThreadResult: integer = -1 ;

hthread:=CreateThread(nil,0,@OpenServer,ADOConnection1,0,ThreadID);

Function OpenServer(Connection:TADOConnection):Boolean;
{===========Connect A NET DATABASE====}
begin
Try
Connection.Connected:=True;
ThreadResult := 1 ;
except
ThreadResult:=0;
end;
end;

如果 ThreadResult 为-1,线程未执行玩,为0线程执行完失败,为1线程执行完成功。不过在线程执行完,取得ThreadResult之后马上ThreadResult := -1 。

Zhymax 2003-06-16
  • 打赏
  • 举报
回复
在你的代码中OpenServer似乎可以不用,OpenServer的值和Connection.Connected一样,直接判断Connection.Connected不就行了!
sea_way 2003-06-16
  • 打赏
  • 举报
回复
那样不是要考虑临界区问题了.不是更麻烦了?
linx88 2003-06-16
  • 打赏
  • 举报
回复
线程应该是没有返回值的,你可以通过一个全局变量,或通过指针传过去的结构设置一个标示位,然后通过一些同步的机制来得到线程执行的结果。

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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