我的程序里面用到了3个线程:
GetFileThread 
parseFileThread
WriteDBThread
一个是用来接受文件到某个文件夹下的GetFileThread线程 ,一个是用来读取并解析文件的parseFileThread,另外一个是用来将从文件解析出来的内容写入数据库表的WriteDBThread线程。
整个过程出现了不同步的情况,就是接收了100个文件,但是往表里只写入了86个文件的内容。小弟对多线程不是很熟悉,烦请大家帮忙指点一下如何实现把每个读到的文件都能写入到表里 。

解决方案 »

  1.   

    你的线程看起来应该是顺序运行的呀。
    应该
    GetFileThread   -> parseFileThread -> WriteDBThread
    所以最简单的方法用全局变量去控制 
    比如 g_OpFlag :BYTE; // 0: to Get 1: to parse 2: to Write.
    在主线程对其赋值为 0 然后 在线程函数的对其进行修改比较好的方法用消息通知 比如GetFileThread 完了就通知 parseFileThread,而parseFileThread完了就通知parseFileThread。
      

  2.   

    //定义三个线程文件 并创建线程
    tcomm:=class(thread)var
      hcom1,hcom2,hcom3:handle;
    //初始化时打开1hcom1,
      hcom1:=createfile()//在窗体create事件里创建线程的同步
      hcom2:=createevent(nil,true,true,nil);
      hcom3:=createevent(nil,true,true,nil);
      tcomm.create(false);
      

  3.   

    1)我没有创建临界区啊,这个不知道怎么用到的。
    2)我也想过用方法控制线程,但就是不知道某个线程什么时候能完成啊。比如我不知道文件什么时候接收完,也不知道什么时候解析完文件啊。
    3)Jute的方法我还没有试,我看看再回复吧,谢谢楼上3位。
      

  4.   

    WaitForSingleObject(GetFileThread.Handle, INFINATE);
    在 GetFileThread 执行完毕后才返回。