Вопрос по IOCP - PullRequest
       38

Вопрос по IOCP

0 голосов
/ 16 апреля 2009

Если я хочу использовать порт завершения для получения информации из другого потока,

как мне спроектировать структуру программы? Как насчет приведенной ниже?

Если я хочу использовать глобальную функцию, как я могу установить мьютексы?

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 голосов
/ 20 июля 2010

Push Framework, http://www.pushframework.com также использует этот дизайн, за исключением того, что добавляет еще один поток для приема входящих соединений.

0 голосов
/ 21 июля 2009

Попробуйте это решение:

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.

...