0

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

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

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

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();
    }

}
4

2 回答 2

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 后不会被调用。

于 2009-07-21T12:27:39.230 回答
0

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

于 2010-07-20T10:10:57.197 回答