Порт завершения ввода-вывода (IOCP) обычно используется с пулом потоков для обработки событий / действий ввода-вывода, в то время как пул потоков WinAPI (который вы указываете через QueueUserWorkItem) является просто реализацией Microsoft типичного пула потоков, который будет обрабатывать задачи без ввода-вывода.
Глядя на вашу связанную ветку, кажется, что вы просто удаляете задачу из списка FIFO, который не имеет ничего общего с IO. Таким образом, последний, скорее всего, то, что вы после. Я не думаю, что разница в производительности должна быть вашей проблемой, в отличие от того, какой API вам подходит.
РЕДАКТИРОВАТЬ: если вам нужен полный контроль над созданием и завершением потока (хотя завершать поток не всегда нормально, так как стек не раскручивается), то вам лучше будет создать собственный пул потоков с помощью WaitForSingleObject (или, скорее, MultipleObjects) для сигнала выхода) и SetEvent. Пул потоков WinAPI - это, в основном, автоматическое создание и завершение потоков Microsoft в зависимости от загрузки потоков.