"是否线程运行过程中不允许创建新的对象实例?"  是允许的。
Delphi我没玩过。尝试着建议一下:
确定线程A在运行中,trace进去,在不执行的这一行的前一行加断点看看。
确定你的调用方法正确,Tplayobject没有失效,参数没问题。
改变这句话在过程中的位置看看。

解决方案 »

  1.   

    to ericzhangaili:
    我的调试方法是没问题的吧。我在Tplayobject的create事件中设置了断点了,发现没有执行到那个断点中。
    而当我把playobject:=Tplayobject.create(channel,soundfile);
    放到其它地方如:Tform.create中的时候发现该实例是可以 创建的。
    procedure TDetectThread.Execute;
    var
      i:integer;
      Caller:Pchar;
      playObject:TPlayThread;
    begin  while not(queryClose) do
        begin
          for i:=0 to MaxChannels-1 do
            begin
              if TV_RingDetect(i)>0 then
                begin
                  TV_OffHookCtrl(i); 
                  TV_ReceiveCallingId(i,Caller,CallerID_Len); //我单步执行到这里还可以运行的
                  PlayObject:=TplayThread.Create(i,'Caller');  //但下面这一句就是不执行。请问原因?
                  playlist.Add(playObject);
                end;
            end;
         end;
    end;
      

  2.   

    单步到上面一行,然后再单步是什么现象?
    这时,PlayObject是什么值?
    有无类似GetLastError的可用?能看看发生了什么错误。
    Delphi实在是不懂,硬着头皮瞎出主意啦。
      

  3.   

    单步执行到哪里的时候程序就好像结束了。也没有看到playobject是一个什么样的值。
    没发现任何error可以捕捉的。**sigh!
      

  4.   

    问题已经解决!
    ericzhangali谢谢你的参与!