线程问题:调用的代码在哪里执行的?

cjf1009 2005-03-28 03:17:21
在线程里我这样调用一个函数:
procedure AThread.execute();
begin
……
CheckLogin(AThread,UserName,Psw);
end;

procedure TFMain.CheckLogin(AThread : TIdPeerThread;User,Psw : string);
begin
with athread do
begin
……
end;
end;

我想知道这个过程的代码是在线程里执行的还是在主线程里执行的?
...全文
168 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
DDGG 2005-03-29
  • 打赏
  • 举报
回复
只要是在线程的 Execute() 函数里,且不是通过 Synchronize 方法调用的代码,全部都是由子线程运行的。
cjf1009 2005-03-29
  • 打赏
  • 举报
回复
再顶
cjf1009 2005-03-29
  • 打赏
  • 举报
回复
顶一下
cjf1009 2005-03-29
  • 打赏
  • 举报
回复
为什么?顶
cjf1009 2005-03-29
  • 打赏
  • 举报
回复
就是说如果我把过程内的代码全部拷到线程里面去,如果不出错的话,这样调用应该就没问题吧。

其实我这样做主要是不想execute里面的代码行数太多,显的太乱。
flyinwuhan 2005-03-29
  • 打赏
  • 举报
回复
>>我现在是在子线程里调用主线程的函数,应该可以吧
如果“调用的主线程的函数”内分配了内存,或访问了全局变量,或主form的成员变量都是不安全的
Bitter_fish 2005-03-29
  • 打赏
  • 举报
回复
Synchronize内的在主线程里,通过消息实现的,其它的子线程里。

注意:子线程不能操作VCL,因为VCL不是为多线程设计的,所以可能会出错。
cjf1009 2005-03-29
  • 打赏
  • 举报
回复
to: flyinwuhan(制怒·三思而后行)
我现在是在子线程里调用主线程的函数,应该可以吧

to : DDGG(叮叮当当)
如果有多个线程同时调用这个函数,还会出错吗?函数里面没涉及vcl。
SeaWave 2005-03-29
  • 打赏
  • 举报
回复
这个是在当前线程里执行的,不是主线程。
flyinwuhan 2005-03-29
  • 打赏
  • 举报
回复
你这样做是错误的~~~``
procedure TFMain.CheckLogin(AThread : TIdPeerThread;User,Psw : string);
begin
with athread do//不能在主线程中调用子线程的函数
begin
……
end;
end;
darkie28 2005-03-28
  • 打赏
  • 举报
回复
主线程

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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