單挑:我不熟悉使用線程池,這可能會從下面的代碼中看出來。我的印象是,我可以將許多值推入該隊列,然後等待一個線程完成,然後轉到下一個線程,系統將處理要運行多少個線程的同步。有很多線程的線程池queueuserworkitem
我想使用ThreadPool :: QueueUserWorkItem(waitcallback,num)其中的值被迭代到動態值取決於一些先前的算法。我遇到的問題是程序崩潰時,它太高。
WaitCallback^ wcb = gcnew WaitCallBack(this, &createImage);
for(int i = 0; i < numBlocks; i++)
{
ThreadPool::QueueUserWorkItem(wcb, i);
}
我得到的消息「運行時錯誤!此應用程序已請求運行時終止它在一個不尋常的方式,請聯繫應用程序的支持團隊以獲取更多信息。」
我最反感通過了numBlocks運行= 644
你的代碼叫做terminate()。這通常是因爲非託管代碼拋出了一個C++異常,並沒有被捕獲。與您發佈的代碼段無關。確保使用以混合模式運行的調試器來調試代碼。 – 2013-03-26 17:22:06
如果是這樣的話,它可能與我進行圖像轉換有關,因爲在我以線性方式運行任務之前,我始終能夠假定文件已關閉,正在讀取。現在,我問,這種類型的異常可能來自多個線程試圖打開同一個文件嗎? – 2013-03-26 17:53:02
當然,這是行不通的。它不需要多個線程,你一定需要改進你的錯誤處理。 – 2013-03-26 17:58:34