Имах проблем, описан тук, и ми беше предложено да използвам портове за завършване на IO или пул от нишки.
Приложих IO завършване, извиквайки PostQueuedCompletionStatus
за поставяне на задачата в опашка и GetQueuedCompletionStatus
за получаване на следващата задача, за да я изпълни. Използвам порт за завършване на IO като безопасен за нишки FIFO контейнер за множество производители/много потребители без изрични заключвания. Това ме кара да имам пълен контрол върху нишките, защото може да се наложи да прекратя процеса ones за дълго време и да ги докладвам. Също така GetQueuedCompletionStatus
чака извикващата нишка, ако няма останала задача.
Освен прекратяването, пулът от нишки отговаря на нуждите ми: задачите ми се изпълняват за по-малко от милисекунда, но има много от тях. Също така извикването на QueueUserWorkItem
и оставянето на ОС да извършва синхронизациите и изпълнението е по-лесно.
Има ли разлики между двата подхода по отношение на ефективността? Някакви коментари относно моята реализация?
Последният параметър тук е най-малкото грешен:
sizeof(ovector) дава размера в байтове, но pcre_exec се нуждае от броя int, така че променете това на
В документацията се посочва още
Намеква се, че размерът трябва да е кратен на 3, въпреки че тази част е доста неясна.
- person Chris Becke   schedule 22.12.2010GetQueuedCompletionStatus
и блокиращо извикване, което ще се върне, когато има работа за вършене. Windows ще присвои работата на една от нишките, които не работят вGetQueuedCompletionStatus
, за да им даде работата. - person Ian Boyd   schedule 27.10.2013