【发布时间】:2009-10-13 01:19:35
【问题描述】:
我想并行化构建在 Windows 窗体之上的 3D 体素编辑器,它使用光线投射器进行渲染,因此划分屏幕并让池中的每个线程来渲染它的一部分应该是微不足道的。
问题出现在 Windows 窗体的线程必须作为 STA 运行 - 我可以让其他线程启动并完成工作,但在等待它们完成时阻塞主线程会导致奇怪的随机死锁。
保持主线程畅通也是一个问题 - 例如,如果用户使用填充工具,输入将在渲染过程中进行处理,这将导致“中间”图像(部分着色的对象,例如例子)。在每一帧之前复制整个图像也是不可行的,因为如果必须每帧都复制,体积足够大,可以抵消任何性能提升。
我想知道是否有任何解决方法可以让 amin 线程在用户看来被阻塞,这样它实际上不会被阻塞,但会将输入处理延迟到下一帧。
如果不可能,是否有更好的设计来处理这个问题?
编辑:阅读 anwsers 我想我不清楚 raycaster 是否实时运行,因此显示进度对话框根本不起作用。不幸的是,FPS 足够低(5-40 取决于各种因素),帧之间的输入会产生不需要的结果。
我已经尝试实现它阻塞 UI 线程并使用 ThreadPool 的一些线程进行处理,除了 STA 的这个问题之外它工作正常。
【问题讨论】:
-
随机输入事件。单击任务栏上的最小化应用程序通常会执行此操作 - 有时 Windows 会发出哔声(错误哔声),有时会崩溃。
标签: c# winforms multithreading