我的VCL线程要写文件,如果不用同步程序会报异常,该怎么同步,请多多指教!!!!!!!!

解决方案 »

  1.   

    还有,不能用Synchronize实现,Synchronize要求过程没有参数.
    怎么没有人回答啊,!!!!!!!!!!!!!!!!!!!!!!!!!
      

  2.   

    写文件的话,可以这样,引用文件句柄的时候,(我假定你一开始就打开了文件)可以用windows的临界区保护,同一个句柄用同一个临界区,例子:
    var
    FLock:TRTLCriticalSection;
    .
    .
    .
    nitializeCriticalSection(FLock);
    .
    .
    .
    EnterCriticalSection(FLock);
    文件操作
    LeaveCriticalSection(FLock);
    .
    .
    .
    DeleteCriticalSection(FLock);这是一个办法,还有一个办法就是用Synchronize,合理的设计,那个方法总是可以用的!不过我比较奇怪的是,文件句柄是依赖进程的,而不是线程的,同一个进程的线程总是可以随便操作这个进程中任何线程打开的文件句柄,你的程序怎么会报错呢?除非你对已经打开的文件又进行了打开操作,这是你的程序的问题!
      

  3.   

    一个笨一点的办法,将Synchronize的过程中的参数独立出来,然后在调用Synchronize之前赋值给这些参数。