封装IOCP-4:示例和源代码

实现了对IOCP的封装之后,以下是如何使用的示例:

 

 

/// 已处理的工作单元计数,在数据部分,不做事,只计数

TLockVar<int> processedWorkUnitNum;

 

/**

* 我的IOCP处理线程示例

*/

class TMyIOCPThread : public TIOCPThread<TPack<int> >

{

public:

    TMyIOCPThread(TIOCPHandle<TPack<int> >* handle)

        :TIOCPThread<TPack<int> >(handle)

    { /* 空的 */ }

 

    virtual void initialize() { /* 没有什么好初始化的*/}

 

    virtual void uninitialize() { /* 没有什么好销毁的*/ }

 

    /// 处理工作单元

    virtual void process(DWORD compley, TPack<int>* workunit)

    {

        TPack<>* pack = dynamic_cast<TPack<> *>(workunit);

 

        if ( pack )

        {

            processedWorkUnitNum++;  // 处理数据,这里简单进行数据    

        }

    }

};

 

若要在TMyIOCPThread::process之前做判断,可以加响应TOnBeforeIOCPProcess事件:

/**

* 我的处理过程

*/

class TMyProcess : public TObject

{

public:

    void beforeIOCPProcess(DWORD* compkey, TPack<int>* workunit, bool& option)

    {

        option = true; // 返回true,则TIOCPThread::process会继续处理,否则不处理

    }

};

 

main函数:

 

int _tmain(int argc, _TCHAR* argv[])

{

    TIOCPModel<TPack<int>, TMyIOCPThread> iocp; // IOCP封装

    TMyProcess myprocess; // 我的处理过程

 

    iocp.setOnBeforeIOCPProcess(&myprocess, static_cast<TIOCPModel<TPack<int>, TMyIOCPThread>::TOnBeforeIOCPProcess>(&TMyProcess::beforeIOCPProcess));

    iocp.setEnabled(true); // 开始工作

 

    while(!_kbhit()) ::Sleep(1); // 等待按键

   

    return 0;

}

 

如何,使用起来是不是很简单?

 

以下是源代码下载

如果无法下载,请来信[email protected]  向我索取即可。

你可能感兴趣的:(工作,Class)