Exemplo n.º 1
0
        private unsafe void Execute()
        {
            CompletionInterop.OverlappedEntry[] entries
                = new CompletionInterop.OverlappedEntry[1024];

            while (completed == false)
            {
                uint processed;

                bool result = CompletionInterop.GetQueuedCompletionStatusEx(
                    port,
                    entries,
                    entries.Length,
                    out processed,
                    1000,
                    0);

                if (result)
                {
                    for (int i = 0; i < processed; i++)
                    {
                        CompletionInterop.OverlappedEntry entry = entries[i];
                        Overlapped         overlapped           = Overlapped.Unpack(entry.lpOverlapped);
                        CompletionCallback callback             = overlapped.AsyncResult as CompletionCallback;

                        callback?.Complete(entry.lpOverlapped, (int)entry.dwNumberOfBytesTransferred);
                        Overlapped.Free(entry.lpOverlapped);
                    }
                }
            }
        }
Exemplo n.º 2
0
        public void Start()
        {
            port   = CompletionInterop.CreateIoCompletionPort(new IntPtr(-1), IntPtr.Zero, 0, 0);
            thread = new Thread(Execute);

            thread.Start();
        }
Exemplo n.º 3
0
 public void Add(IntPtr handle)
 {
     CompletionInterop.CreateIoCompletionPort(handle, port, (uint)handle.ToInt32(), 0);
 }