0
在x86上,它可能無法在工作線程上初始化QImage。 (在x64中很少)malloc()在QtConcurrent :: run()中失敗
當在CPU的核心數量上執行並行處理時,可能性會增加。
這不僅是通過讀取圖像文件,而且通過指定它的大小初始化一個普通的QImage,或簡單地通過調用QImage :: copy()。
這是避免它的代碼。當然,這並不完美。 請告訴我一個更好的方法。
QImage createImageAsync(QString path)
{
QImageReader reader(path);
if(!reader.canRead())
return QImage();
// QImage processing sometimes fails
QImage src;
int count = 0;
do {
src = reader.read();
if(!src.isNull())
break;
if(src.isNull() && count++ < 1000) {
QThread::currentThread()->usleep(1000);
continue;
}
return QImage();
} while(1);
return src;
}
Hae你試圖找出你的程序使用了多少內存?在32位Windows系統上,每個進程都有2GB的限制。另外,你確定它是malloc失敗嗎?如果是的話,你是如何發現的。你有任何錯誤消息? – litelite
出現輸出「QImage:內存不足,返回空圖像」。檢查QImage的實現,我發現根本原因是由於malloc失敗。內存使用量約爲600 MB(私人工作集)。 –
您的計算機是否有足夠的可用內存?你是如何測量使用過的內存的? – litelite