2009-04-16 43 views
0

如果我想用完成端口从不同的线程获取信息,关于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(); 
    } 

} 

回答

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