Внимание: я не очень хорошо знаком с работой с пулом потоков, что может быть очевидно из следующего кода. У меня сложилось впечатление, что я мог бы поместить много значений в эту очередь, а затем дождаться завершения одного потока, а затем перейти к следующему, и система будет обрабатывать синхронизацию того, сколько потоков будет запущено.
Я пытаюсь использовать ThreadPool::QueueUserWorkItem(waitcallback, num), где значение num повторяется до динамического значения в зависимости от некоторого предыдущего алгоритма. Проблема, с которой я сталкиваюсь, заключается в том, что программа вылетает, когда она становится слишком высокой.
WaitCallback^ wcb = gcnew WaitCallBack(this, &createImage);
for(int i = 0; i < numBlocks; i++)
{
ThreadPool::QueueUserWorkItem(wcb, i);
}
Я получаю сообщение "Ошибка выполнения! Это приложение запросило у среды выполнения необычный способ завершения работы. Для получения дополнительной информации обратитесь в службу поддержки приложения".
В моем последнем прогоне было numBlocks = 644.