有关IOCP的问题

时间:2009-04-16 17:13:14

标签: multithreading operating-system iocp

如果我想使用完成端口从不同的线程获取信息,

我该如何设计程序的结构?下面的那个怎么样?

如果我想使用全局函数,我该如何设置互斥锁?

Main(){
  for i in range NumOfThreads{
    CreateIoCompletionPort() 
    CreatThread(ThreadFun)
  }
}

ThreadFun(){

    While(1){
      GetQueuedCompletionStatus(); // wait for completion of an IO
      Process What ever has completed ();
      Start another file operation();
    }

}

2 个答案:

答案 0 :(得分:0)

试试这个解决方案:

Main(){
  for i in range NumOfThreads{
    CreateIoCompletionPort() 
    CreateThread(ThreadFun)
  }

  for i in range NumOfCallerThreads
    CreateThread(ThreadCaller)
}

ThreadCaller(){
  While(1){
    Start another file operation();
  }
}


ThreadFun(){
    While(1){
      GetQueuedCompletionStatus(); // wait for completion of an IO
      Process What ever has completed ();
    }
}

你可以在没有任何关键部分的情况下完成!您只需要保证“启动另一个文件操作();”关闭相应的IOCP后不会被调用。

答案 1 :(得分:0)

Push Framework,http://www.pushframework.com也使用了这个设计,只是它添加了另一个线程来接受传入的连接。