天天看点

[C#]I/O完成端口的类定义和测试实例

整理者:郑昀@ultrapower 

日期:2005-04-13 

从william kennedy那里整理过来的,不同之处在于他自己定义了一个overlapped,而我们这里直接使用 

system.threading.nativeoverlapped:。 

附一段我以前的win32下的iocp文档,如果您了解iocp也可以直接跳过看后面的c#测试示范: 

我们采用的是i/o complete port(以下简称iocp)处理机制。

简单的讲,当服务应用程序初始化时,它应该先创建一个i/o cp。我们在请求到来后,将得到的数据打包用postqueuedcompletionstatus发送到iocp中。这时需要创建一些个线程(7个线程/每cpu,再多就没有意义了)来处理发送到iocp端口的消息。实现步骤大致如下:

1     先在主线程中调用createiocompletionport创建iocp。

createiocompletionport的前三个参数只在把设备同complete port相关联时才有用。

此时我们只需传递invalid_handle_value,null和0即可。

第四个参数告诉端口同时能运行的最多线程数,这里设置为0,表示默认为当前计算机的cpu数目。

2     我们的threadfun线程函数执行一些初始化之后,将进入一个循环,该循环会在服务进程终止时才结束。

在循环中,调用getqueuedcompletionstatus,这样就把当前线程的id放入一个等待线程队列中,i/o cp内核对象就总能知道哪个线程在等待处理完成的i/o请求。

如果在idle_thread_timeout规定的时间内i/o cp上还没有出现一个completion packet,则转入下一次循环。在这里我们设置的idle_thread_timeout为1秒。

当端口的i/o完成队列中出现一项时,完成端口就唤醒等待线程队列中的这个线程,该线程将得到完成的i/o项中的信息:       传输的字节数、完成键和overlapped结构的地址。

在我们的程序中可以用智能指针或者bstr或者int来接受这个overlapped结构的地址的值,从而得到消息;然后在这个线程中处理消息。

getqueuedcompletionstatus的第一个参数hcompletionport指出了要监视哪一个端口,这里我们传送先前从createiocompletionport返回的端口句柄。

需要注意的是:

第一,   线程池的数目是有限制的,和cpu数目有关系。

第二,   iocp是一种较为完美的睡眠/唤醒 线程机制;线程当前没有任务要处理时,就进入睡眠状态,从而不占用cpu资源,直到被内核唤醒;

第三,   最近一次刚执行完的线程,下次任务来的时候还会唤醒它;所以有可能比较少被调用的线程以后被调用的几率也少。

测试代码: 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

using system; 

[C#]I/O完成端口的类定义和测试实例

using system.threading;  // included for the thread.sleep call 

[C#]I/O完成端口的类定义和测试实例

using continuum.threading; 

[C#]I/O完成端口的类定义和测试实例

using system.runtime.interopservices; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

namespace iocpdemo 

[C#]I/O完成端口的类定义和测试实例

[C#]I/O完成端口的类定义和测试实例

    //=============================================================================

[C#]I/O完成端口的类定义和测试实例

    /// <summary> sample class for the threading class </summary> 

[C#]I/O完成端口的类定义和测试实例

    public class utilthreadingsample 

[C#]I/O完成端口的类定义和测试实例

    { 

[C#]I/O完成端口的类定义和测试实例

        //*****************************************************************************    

[C#]I/O完成端口的类定义和测试实例

        /// <summary> test method </summary> 

[C#]I/O完成端口的类定义和测试实例

        static void main() 

[C#]I/O完成端口的类定义和测试实例

        { 

[C#]I/O完成端口的类定义和测试实例

            // create the mssql iocp thread pool 

[C#]I/O完成端口的类定义和测试实例

            iocpthreadpool pthreadpool = new iocpthreadpool(0, 10, 20, new iocpthreadpool.user_function(iocpthreadfunction)); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

            //for(int i =1;i<10000;i++) 

[C#]I/O完成端口的类定义和测试实例

            { 

[C#]I/O完成端口的类定义和测试实例

                pthreadpool.postevent(1234); 

[C#]I/O完成端口的类定义和测试实例

            } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

            thread.sleep(100); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

            pthreadpool.dispose(); 

[C#]I/O完成端口的类定义和测试实例

        } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        //******************************************************************** 

[C#]I/O完成端口的类定义和测试实例

        /// <summary> function to be called by the iocp thread pool.  called when 

[C#]I/O完成端口的类定义和测试实例

        ///           a command is posted for processing by the socketmanager </summary> 

[C#]I/O完成端口的类定义和测试实例

        /// <param name="ivalue"> the value provided by the thread posting the event </param> 

[C#]I/O完成端口的类定义和测试实例

        static public void iocpthreadfunction(int ivalue) 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

            try 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                console.writeline("value: {0}", ivalue.tostring()); 

[C#]I/O完成端口的类定义和测试实例

                thread.sleep(3000); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

            catch (exception pexception) 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                console.writeline(pexception.message); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

    } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

[C#]I/O完成端口的类定义和测试实例

类代码: 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

using system.threading; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

namespace iocpthreading 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

    [structlayout(layoutkind.sequential, charset=charset.auto)] 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

    public sealed class iocpthreadpool 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        [dllimport("kernel32", charset=charset.auto)] 

[C#]I/O完成端口的类定义和测试实例

        private unsafe static extern uint32 createiocompletionport(uint32 hfile, uint32 hexistingcompletionport, uint32* puicompletionkey, uint32 uinumberofconcurrentthreads); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private unsafe static extern boolean closehandle(uint32 hobject); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private unsafe static extern boolean postqueuedcompletionstatus(uint32 hcompletionport, uint32 uisizeofargument, uint32* puiuserarg, system.threading.nativeoverlapped* poverlapped); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private unsafe static extern boolean getqueuedcompletionstatus(uint32 hcompletionport, uint32* psizeofargument, uint32* puiuserarg, system.threading.nativeoverlapped** ppoverlapped, uint32 uimilliseconds); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private const uint32 invalid_handle_value = 0xffffffff; 

[C#]I/O完成端口的类定义和测试实例

        private const uint32 inifinite = 0xffffffff; 

[C#]I/O完成端口的类定义和测试实例

        private const int32 shutdown_iocpthread = 0x7fffffff; 

[C#]I/O完成端口的类定义和测试实例

        public delegate void user_function(int ivalue); 

[C#]I/O完成端口的类定义和测试实例

        private uint32 m_hhandle; 

[C#]I/O完成端口的类定义和测试实例

        private uint32 gethandle { get { return m_hhandle; } set { m_hhandle = value; } } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private int32 m_uimaxconcurrency; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private int32 getmaxconcurrency { get { return m_uimaxconcurrency; } set { m_uimaxconcurrency = value; } } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private int32 m_iminthreadsinpool; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private int32 getminthreadsinpool { get { return m_iminthreadsinpool; } set { m_iminthreadsinpool = value; } } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private int32 m_imaxthreadsinpool; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private int32 getmaxthreadsinpool { get { return m_imaxthreadsinpool; } set { m_imaxthreadsinpool = value; } } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private object m_pcriticalsection; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private object getcriticalsection { get { return m_pcriticalsection; } set { m_pcriticalsection = value; } } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private user_function m_pfnuserfunction; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private user_function getuserfunction { get { return m_pfnuserfunction; } set { m_pfnuserfunction = value; } } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private boolean m_bdisposeflag; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        /// <summary> simtype: flag to indicate if the class is disposing </summary> 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private boolean isdisposed { get { return m_bdisposeflag; } set { m_bdisposeflag = value; } } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private int32 m_icurthreadsinpool; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        /// <summary> simtype: the current number of threads in the thread pool </summary> 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        public int32 getcurthreadsinpool { get { return m_icurthreadsinpool; } set { m_icurthreadsinpool = value; } } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        /// <summary> simtype: increment current number of threads in the thread pool </summary> 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private int32 inccurthreadsinpool() { return interlocked.increment(ref m_icurthreadsinpool); } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        /// <summary> simtype: decrement current number of threads in the thread pool </summary> 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private int32 deccurthreadsinpool() { return interlocked.decrement(ref m_icurthreadsinpool); } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private int32 m_iactthreadsinpool; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        /// <summary> simtype: the current number of active threads in the thread pool </summary> 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        public int32 getactthreadsinpool { get { return m_iactthreadsinpool; } set { m_iactthreadsinpool = value; } } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        /// <summary> simtype: increment current number of active threads in the thread pool </summary> 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private int32 incactthreadsinpool() { return interlocked.increment(ref m_iactthreadsinpool); } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        /// <summary> simtype: decrement current number of active threads in the thread pool </summary> 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private int32 decactthreadsinpool() { return interlocked.decrement(ref m_iactthreadsinpool); } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private int32 m_icurworkinpool; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        /// <summary> simtype: the current number of work posted in the thread pool </summary> 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        public int32 getcurworkinpool { get { return m_icurworkinpool; } set { m_icurworkinpool = value; } } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        /// <summary> simtype: increment current number of work posted in the thread pool </summary> 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private int32 inccurworkinpool() { return interlocked.increment(ref m_icurworkinpool); } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        /// <summary> simtype: decrement current number of work posted in the thread pool </summary> 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private int32 deccurworkinpool() { return interlocked.decrement(ref m_icurworkinpool); } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        public iocpthreadpool(int32 imaxconcurrency, int32 iminthreadsinpool, int32 imaxthreadsinpool, user_function pfnuserfunction) 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                // set initial class state 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                getmaxconcurrency   = imaxconcurrency; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                getminthreadsinpool = iminthreadsinpool; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                getmaxthreadsinpool = imaxthreadsinpool; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                getuserfunction     = pfnuserfunction; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                // init the thread counters 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                getcurthreadsinpool = 0; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                getactthreadsinpool = 0; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                getcurworkinpool    = 0; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                // initialize the monitor object 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                getcriticalsection = new object(); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                // set the disposing flag to false 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                isdisposed = false; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                unsafe 

[C#]I/O完成端口的类定义和测试实例

                { 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    // create an io completion port for thread pool use 

[C#]I/O完成端口的类定义和测试实例

                    gethandle = createiocompletionport(invalid_handle_value, 0, null, (uint32) getmaxconcurrency); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                // test to make sure the io completion port was created 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                if (gethandle == 0) 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    throw new exception("unable to create io completion port"); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                // allocate and start the minimum number of threads specified 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                int32 istartingcount = getcurthreadsinpool; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                threadstart tsthread = new threadstart(iocpfunction); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                for (int32 ithread = 0; ithread < getminthreadsinpool; ++ithread) 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    // create a thread and start it 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    thread ththread = new thread(tsthread); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    ththread.name = "iocp " + ththread.gethashcode(); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    ththread.start(); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    // increment the thread pool count 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    inccurthreadsinpool(); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

            catch 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                throw new exception("unhandled exception"); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        ~iocpthreadpool() 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

            if (!isdisposed) 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                dispose(); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        public void dispose() 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                // flag that we are disposing this object 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                isdisposed = true; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                // get the current number of threads in the pool 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                int32 icurthreadsinpool = getcurthreadsinpool; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                // shutdown all thread in the pool 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                for (int32 ithread = 0; ithread < icurthreadsinpool; ++ithread) 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    unsafe 

[C#]I/O完成端口的类定义和测试实例

                    { 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                        bool bret = postqueuedcompletionstatus(gethandle, 4, (uint32*) shutdown_iocpthread, null); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                // wait here until all the threads are gone 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                while (getcurthreadsinpool != 0) thread.sleep(100); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    // close the iocp handle 

[C#]I/O完成端口的类定义和测试实例

                    closehandle(gethandle); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        private void iocpfunction() 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

            uint32 uinumberofbytes; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

            int32  ivalue; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                while (true) 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                        system.threading.nativeoverlapped* pov; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                        // wait for an event 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                        getqueuedcompletionstatus(gethandle, &uinumberofbytes, (uint32*) &ivalue, &pov, inifinite); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    // decrement the number of events in queue 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    deccurworkinpool(); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    // was this thread told to shutdown 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    if (ivalue == shutdown_iocpthread) 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                        break; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    // increment the number of active threads 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    incactthreadsinpool(); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    try 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                        // call the user function 

[C#]I/O完成端口的类定义和测试实例

                        getuserfunction(ivalue); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    catch(exception ex) 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                        throw ex; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    // get a lock 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    monitor.enter(getcriticalsection); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                        // if we have less than max threads currently in the pool 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                        if (getcurthreadsinpool < getmaxthreadsinpool) 

[C#]I/O完成端口的类定义和测试实例

                        { 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                            // should we add a new thread to the pool 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                            if (getactthreadsinpool == getcurthreadsinpool) 

[C#]I/O完成端口的类定义和测试实例

                            { 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                                if (isdisposed == false) 

[C#]I/O完成端口的类定义和测试实例

                                { 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                                    // create a thread and start it 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                                    threadstart tsthread = new threadstart(iocpfunction); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                                    thread ththread = new thread(tsthread); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                                    ththread.name = "iocp " + ththread.gethashcode(); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                                    ththread.start(); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                                    // increment the thread pool count 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                                    inccurthreadsinpool(); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                                } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                            } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                        } 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    catch 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    // relase the lock 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    monitor.exit(getcriticalsection); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    decactthreadsinpool(); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

            catch(exception ex) 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                string str=ex.message; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

            // decrement the thread pool count 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

            deccurthreadsinpool(); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        //public void postevent(int32 ivalue 

[C#]I/O完成端口的类定义和测试实例

        public void postevent(int ivalue) 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                // only add work if we are not disposing 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                if (isdisposed == false) 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                        // post an event into the iocp thread pool 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                        postqueuedcompletionstatus(gethandle, 4, (uint32*) ivalue, null); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    // increment the number of item of work 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    inccurworkinpool(); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                    // release the lock 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

            catch (exception e) 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                throw e; 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        }   

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

        public void postevent() 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例

                        postqueuedcompletionstatus(gethandle, 0, null, null); 

[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例
[C#]I/O完成端口的类定义和测试实例