我一个线程的程序,当有消息到的时候,我就创建线程来处理这个消息。至于这个消息什么时候到,不确定。程序正常运行2-3天,就会出现这样的错误。出现这样错误的原因可能是什么,哪位朋友可以帮帮解释一下。我对线程了解不是很深入。望帮忙。:QQ173985738。

解决方案 »

  1.   

    你用Task看一下你那进程的线程数量是多少。这个原因大概是说一个进程产生的次线程是有限的,当前进程的线程数已经超过限制,,你不能无限制的创建线程。你相当于写了这样的代码:
    while True do
    begin
      CreateThread(...); 
      Sleep(N分钟);
    end;解决很简单,你在CreateThread之前,先看看线程数量有多少,超过最大线程数量(自定义)时,则raise也好,将处理延时也好,做什么都好。
    或者说使用线程池:
    QueueUserWorkItem (for W2K or later)
    如果不然,自己写个线程池的实现(到playicq找找,有个线程池的类)
      

  2.   

    我观察了一下任务栏,发现随着程序的运行(创建线程),内存的使用量足建增加。是不是内存没有释放好。释放内存是不是只要把FreeOnTerminated = true?就可以了?
      

  3.   

    FreeOnTerminated := True; 当退出线程的 Execute 时可以自动释放线程对象,你应该在析构函数 Destroy 中释放相关的自己定义的指针或对象。
      

  4.   

    在线程excute里,不是Create里 设FreeOnTerminate:=True;