我想是这样的
procedure TForm1.Button1Click(Sender: TObject);
begin
 线程1,开启
end;线程1:检测当前状态,比如地面是否有物品,是否有怪,有怪就开启线程2,有物品就开启线程3.
线程2:负责打怪。
线程3:负责捡物。
我线程2和3写在线程1里面是否可行?如果不行应该是什么思路去写?如果换成等价的时钟要如何写?我自己感觉时钟写,这个循环时间是很困扰我,如果循环快了,刚才打的怪,还没打死,可能又去打其他怪了(我是选择最近的怪打,在一直打怪到死,如果写在时钟里面,时钟重新循环是否会改变打的怪?)

解决方案 »

  1.   

    1.创建2线程
    2.在线程函数中使用GETMESSAGE进行阻塞线程
    3.当条件触发(比如地面是否有物品,是否有怪)时,就通过主线程向子线程1或子线程2发一个消息,这时子线程将被唤醒,开始处理相关业务。处理完毕后线程再次处于休眠状态
    4.当线程需要退出时,发送消息通知2线程退出
      

  2.   

    http://topic.csdn.net/u/20110217/11/56577c65-2e77-4f8f-b541-0be47cdb4d60.html
      

  3.   

    汗,这个GETMESSAGE进行阻塞线程
    做什么用我不是很懂。
    还有主线程给子线程发送消息达到唤醒或者暂停线程的目的,是用 PostThreadMessage的吗?还是什么方法,如果是那 PostThreadMessage里面应该写什么才是暂停线程和唤醒线程啊?
      

  4.   

    1.是用PostThreadMessage
    2.已经告诉你了,在线程函数中加一个消息循环,例//线程函数
     FreeOnTerminated:=True;
     while GetMessage(Msg, 0, 0, 0) do  
     begin
        //如果这里没有消息,GetMessage会使线程休眠,当收到主线程发的消息后
        if Msg.Message=xxx then
        begin
          打怪函数();
        end;
        if Msg.Message=退出消息 then
        begin
           break;
        end;
     end;
      

  5.   

    不管PostThreadMessage发过来任何消息都是休眠吗?还是说其他?那唤醒是发什么消息呢?