用CreateThread函数创建线程
hthread:=CreateThread(nil,0,@MyThreadfunc,nil,0,ThreadID); MyThreadfunc有一些窗体界面的操作、更新,为什么有时可以,有时却会整个应用程序都退出来?
特别是在实际运行环境经常会异常结束应用程序,怎么办?如何捕捉异常?在开发环境却从未有异常结束应用程序的情况,郁闷啊!

解决方案 »

  1.   

    http://www.coderpub.com/View.aspx?fbId=5&Id=3179
    这里有一个“线程分析”写得很具体的文章,你可参考一下
      

  2.   

    VCL 绝大部分控件是线程非安全。所以应该是同步的问题。
      

  3.   

    还是用线程类吧,它封装的还不错{ Important: Methods and properties of objects in VCL or CLX can only be used
      in a method called using Synchronize, for example,      Synchronize(UpdateCaption);  and UpdateCaption could look like,    procedure TMyThread.UpdateCaption;
        begin
          Form1.Caption := 'Updated in a thread';
        end; }
      

  4.   

    对建议用TThread类,
    可参考一下我的那两篇文章:
    http://blog.csdn.net/linzhengqun
      

  5.   

    >>MyThreadfunc有一些窗体界面的操作、更新,为什么有时可以,有时却会整个应用程序都退出来?里面出现了异常,
    至于是什么异常,从你的表达无法判断,
    而且,你用 CreateThread, 而不是用delphi的 tThtread, 也更加不可控
      

  6.   

    其实同步就是在你需要更新界面的时候同步,具体操作是不需要同步的。
    用TThread可以很方便很到,用Syn...函数在主线程中调用一方法,然后在这个方法中生成一个事件让主线程界面去响应即可。
      

  7.   

    你最好把更新介面的操作不要放在MyThreadfunc里面
    MyThreadfunc通过发消息来更新介面
    建议用TThread类
      

  8.   

    hthread:=CreateThread(nil,0,@MyThreadfunc,nil,0,ThreadID); 
    这种方法这2天不止一次的看到了,为什么不用TThread类呢?
      

  9.   

    我是用postMessage来更新界面的啊