我启动一个work线程,监控一个目录(用了ReadDirectoryChangeW函数循环来监控),一旦监视到有新文件生成,就发消息给主线程,主线程要对这些新生成的文件进行处理(比较耗时)。本来我设计work线程循环,每发现一个文件,就发消息等待主线程处理完毕,但发现两个线程的同步有问题,work线程如果等待,就会监控不到批量文件的生成,比如,该目录声称了一个1.dat,work线程监控到,等待主线程处理1.dat完毕,但是在这段时间内,又生成2.dat,3.dat,则work线程的ReadDirecotyrChangeW函数监控不到。
应该怎么做,才能保证两个线程互不干扰,既能准确的监控,又能及时的处理。请大家指点迷津

解决方案 »

  1.   

    ReadDirecotyrChangeW发现有文件发生变化后,重新生成文件列表,比较文件列表的变化。
      

  2.   

    感谢楼上二位的回答,第一种方法我想过,不过觉得太麻烦
    第二种方法也正是我考虑的。另外这种方法需不需要对队列做同步处理呢,如果不做,会不会导致死锁,如果做了,work线程会否因为等待而忽略了新增的文件呢,希望老大们继续出主意,呵呵
      

  3.   

    同步的话,也只是针对双方存和取那一刹那。因为主线程只需要在取得需要操作的文件信息时同步一下就可以了,而处理文件的过程是不需要和work线程同步的。所以,不会影响work线程监控新增文件阿
      

  4.   

    work可以不等待处理完吧
    他可以不断的给主线程发现改动的消息
    然后在主线程中加一个队列来存放这些信息