最近我开始了一个项目,它可以将一些预先计算的 Grafix/Audio 导出到文件中,以供后处理。
我所做的只是在我的主 xib 中放置一个新窗口(带有进度指示器和一个中止按钮)并使用以下代码打开它:
[NSApp beginSheet: REC_Sheet modalForWindow: MOTHER_WINDOW modalDelegate: self didEndSelector: nil contextInfo: nil];
NSModalSession session=[NSApp beginModalSessionForWindow:REC_Sheet];
RECISNOTDONE=YES;
while (RECISNOTDONE) {
if ([NSApp runModalSession:session]!=NSRunContinuesResponse)
break;
usleep(100);
}
[NSApp endModalSession:session];
后台线程 (pthread) 较早启动,以实际执行工作并保存所有 targas/wave 文件。效果很好,但是经过一段时间后,结果发现主线程不再响应,并且我的内存占用势不可挡。我尝试用 Instruments 调试它,并看到很多 CFHash 等东西增长到无穷大。
偶然我点击了工作表下方,暂时它有所帮助,主线程(AppKit?)正在释放它的东西,但只是一段时间。
我无法向我解释,首先我认为这是从我的线程访问 Progressbar 以更新进度(间隔为 0.5 秒),所以我把它删掉了。但是,即使我没有更新任何内容并且没有对进度条做任何事情,我的应用程序也会占用所有内存,因为没有释放它的“主事件”或任何东西。
有没有可能“耗尽”这个主线程内存的东西(Runloop / NSApp 调用?)。为什么主线程不再响应(在这个简单的任务之后)???
我没有clou了,请帮助!
提前致谢 !
PS你们如何实现“线程长任务”的东西并更新你的gui?