我的想法是这样的,自己写一个日志类,前台通过调用接口发送日志到日志消息队列中,后台启动一个线程,将读到的数据保存在文件中,谁有类似的代码可以参考的啊?
    或者哪位有DELPHI实现的PV操作的源码让我参考一下最好,谢谢!

解决方案 »

  1.   

    1.创建日志队列CreateIoCompletionPort
    2.业务线程PostQueuedCompletionStatus投递日志任务
    3.日志线程GetQueuedCompletionStatus取得日志任务写文件
      

  2.   

    TBizThread = class(TThread)
    public
      procedure Execute; override;
    end;TLogThread = class(TThread)
    public
      procedure Execute; override;
    end;TCustomLog = class(TComponent)
    private
      FFile: string; 
      FLogThread: TLogThread;
      FBizThread: TBizThread;
    public
      constructor Create; override;
      destructor; override;
      procedure Lock;
      procedure UnLock;
    protected
      property File: string read FFile write FFile; 
    end;TLog = class(TCustomLog)
    published
      property File;
    end;
    给你一个框架结构,自己补充吧!
      

  3.   

    这个在Delphi自带的Source当中就有。source\Win32\internet\ISAPIThreadPool.pas,它实现的是一个线程池,其实工作原理是一样的。
      

  4.   

    也可以参考一下下面的贴子:
    http://topic.csdn.net/u/20080527/12/ab4518d9-979f-468d-bdb5-8638b504de7a.html
      

  5.   

    这两天终于把需要的东西写出来了,大致实现如下:需求描述:自己写一个日志类,前台多个线程通过调用接口发送日志到日志消息队列中,后台启动一个线程,将读到的数据保存在文件中。实现步骤
    1、参照cnpack的源码写了一个线程安全的队列作为日志缓冲区;
    2、将上述队列封装在一个日志类中,日志类提供两个方法:1、发送数据到日志队列种;2、读取日志队列。由于这是一个典型的生产者消费者问题,即线程同步问题,我是用了PV操作,启用了两个信号量。
    3、在日志类种创建了一个线程,将读取日志队列的方法放在线程中运行,同时将占用时间较长的写文件操作放在队列中。
    4、结束。