求助:线程之间的嵌套使用 ( 积分: 100 )

  • 主题发起人 主题发起人 孤云
  • 开始时间 开始时间

孤云

Unregistered / Unconfirmed
GUEST, unregistred user!
问题是这样的,有3个线程A,B,C
procedure cmd_start;
var
A:TA;
B:TB
C:TC
begin
.......
.......
A:=TA.Create(False);//先执行线程A
//在线程A中有一个变量var1,当该变量var1=const1(某一特定值)时,触发线程B,同时结束或者暂停线程A,当B执行完,且var2=const2时在重新运行A;
B:=TB.Create(False);
//同样当线程A和线程B中的一个变量var1=const3 and var3=const4同时满足时,触发线程C,同时结束或者暂停线程A和线程B,当var4=const5时在重新运行A和B,如此循环
C:=TC.Create(False);
end;

请问在线程中怎么实现?
procedure TA.Execute;
var
begin
WHILE Truedo
begin
IF Terminated then
Break;
Synchronize(DoInOPT1);
//执行线程操作程序
.......
end;
end;

procedure TB.Execute;
var
begin
WHILE Truedo
begin
IF Terminated then
Break;

//请问在线程里怎么弄,直接A.Terminate;??
if var1=const1 then
begin
A.Terminate;//可以这样????

Synchronize(DoInOPT2);
//执行线程操作程序
if var2=const2 then
begin
A:=TA.Create(False);
//????
end;
end;

.......
end;
end;

procedure TC.Execute;
var
begin
WHILE Truedo
begin
IF Terminated then
Break;
//该怎么弄?
Synchronize(DoInOPT3);
//执行线程操作程序
.......
end;
end;
 
Create和Terminate建议都放主线程中,即发送消息给主线程,其实主要是为了结构清晰
 
因为只有当线程A运行到一定的程度才能要触发线程B执行的,这个在主线程中好像不太好弄
能不能给具体的建议,谢谢!
 
线程A运行到什么程度只有线程A自己清楚,然后用消息通知主线程,这是很正常的事。
线程A只管自己该干的事,到某个东西需要线程B了就告诉主线程,我需要线程B,你给我弄个过来。。。而不是自己要自己就创建一个。难道你要吃饭还自己先种地?
 
不好意思,对线程不是特别熟悉
“用消息通知主线程”这个应该怎么弄
能不能给一个简单的例程
谢谢!
 
请各位大虾帮帮忙!
 
实在不行用Timer触发线程!
 
const
WM_THREADMSG = WM_USER + 1;
Msg1 = 0;
Msg2 = 1;
...
线程中调用(主线程的某个窗体的句柄为Handle)
PostMessage(Handle, WM_THREADMSG, Msg1, 0);
窗体中写个函数
procedure WMThread(var Message: TMessage);
message WM_THREADMSG;
procedure TWinControl.WMPaint(var Message: TMessage);
begin
case Message.WParam of
Msg1:...
Msg2:...
...
end;
end;
 
后退
顶部