Heads up: Я не очень хорошо знаком с работой с threadpool, что может быть очевидно из следующего кода. У меня создается впечатление, что я мог бы вставить много значений в эту очередь, а затем он будет ждать завершения одного потока, а затем перейти к следующему, и система будет обрабатывать синхронизацию количества потоков, которые будут запущены.Threadpool queueuserworkitem со многими потоками
Я пытаюсь использовать ThreadPool :: QueueUserWorkItem (waitcallback, num), где значение num повторяется до динамического значения в зависимости от некоторого предшествующего алгоритма. Проблема, с которой я сталкиваюсь, - это сбой программы, когда она становится слишком высокой.
WaitCallback^ wcb = gcnew WaitCallBack(this, &createImage);
for(int i = 0; i < numBlocks; i++)
{
ThreadPool::QueueUserWorkItem(wcb, i);
}
Я получаю сообщение «Ошибка выполнения Это приложение просил Runtime прекратить его необычным способом. Пожалуйста, свяжитесь со службой поддержки приложения для получения дополнительной информации.»
Мой самый негодуют пробежать имел numBlocks = 644.
Ваш код называется terminate(). Это обычно потому, что неуправляемый код бросил исключение C++, и он не был пойман. Ничего общего с опубликованным фрагментом. Обязательно отлаживайте код с отладчиком, работающим в смешанном режиме. –
Если это так, возможно, это связано с тем, что я делаю преобразование изображения, прежде чем я запускал задачу линейным способом, и я всегда мог предположить, что файл был закрыт, из которого я читаю. Теперь, я спрашиваю, возможно ли, что этот тип исключения может быть из нескольких потоков, пытаясь открыть один и тот же файл? –
Несомненно, это не сработает. Он также не требует нескольких потоков, вам определенно необходимо улучшить обработку ошибок. –