我在主窗体中放一个idudpclient,执行的时候我会有一个监听线程进行监听,而这个监听线程中间用的就是这个idudpclient,他被作为参数传入该线程的构造函数中,那么如果动态产生两个线程的时候,会不会出现一个执行完毕后另外一个才会执行,是否属于真正的多线程呢

解决方案 »

  1.   

    监听线程中间用的就是这个idudpclient,他被作为参数传入该线程的构造函数中。
    不知你这么说是什么意思?你是说把主窗口(即主线程)的idudpclient的句柄传入了,还是直接构造了一个新的?如果你相当于在线程内部新建了一个idudpclient 那么就是多线程。如果你只是每个线程都在监听主线程的idudpclient ,那么也是多线程,但对idudpclient来说,只是在主线程内部工作,是单线程。通常我用多线程做客户端时,都是把id的控件包在thread类内部。通过mutex控制共享数据部分。
      

  2.   

    比如说吧:
    主窗体里面有个idudpclient控件,主窗体里面调用线程构造函数for i:=0 to 10 do 
    begin
     TTestThread.create(idudpclient);
    end;
    而线程的构造函数是
     create(idudpclient:TIdudpclient);
    begin
     Fidudpclient:=idudpclient;end;
    如果在线程里面有对Fidudpclient的操作,那么循环产生的线程是否是顺序执行的,也就是说是其实是单线程,还是是真实的多线程,互相执行,互不干扰
      

  3.   

    因为我现在出现的问题就是主进程中的idudpclient控件在循环的监听,如果监听到了有服务器发来的信息以后,我要做处理的,而且对于某些特定情况下,线程中还要生成其他的线程类对象,而每个线程类中的的通讯控件发送出去的信息都要统一被一个主进程里面的udp控件来监听处理的
      

  4.   

    那我建议最好还是采用idudpclient直接放在线程中,而对于要收发的数据通过队列交互,避免多线程情况对于资源占用的冲突