2009-04-16 8 views
0

Si je veux utiliser le port d'achèvement pour obtenir des informations de différents fils,Une question sur IOCP

comment puis-je concevoir la structure du programme? Que diriez-vous celui ci-dessous?

Si je veux utiliser une fonction globale, comment puis-je définir les mutex?

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

} 

Répondre

0

Essayez cette solution:

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

Vous pouvez le faire sans sections critiques! Tout ce dont vous avez besoin est une garantie que "Démarrer une autre opération de fichier()"; ne sera pas appelé après la clôture de l'IOCP correspondant.

0

Push Framework, http://www.pushframework.com utilise ce design aussi, sauf qu'il ajoute un autre thread pour accepter les connexions entrantes.