关于c++/c#/java 多线程绘图问题说明

  • Post author:
  • Post category:java


起初是在做android意识到主线程绘图的问题,只能在主线程中将图形绘制到屏幕上,在子线程中,也只能发送消息通知主线程绘图。后来看了下,所有语言亦是如此。作为初学者,我想不免会有疑问,为什么只能在主线程中绘图呢?为什么要有这样的限制?我多个线程绘图不是更快吗?其实如果你有这样的想法,就和当时的我一样,对线程没有理解到位。

首先,先说说在设计上为什么绘制都选择了单线程,很简单,其实就是因为你只有一双眼睛,一个线程足够满足绘制需求。如果说为什么不多线程分块绘制呢?因为多个线程绘制可能导致图形绘制的不同步。你看到了这个区域已经绘制出来了,而这个窗口的另外一个部分还没有绘制出来,显然这会造成极大的混乱。有人又问,线程同步不就能解决问题了么?那么,你得明白,线程是有开销的,在线程同步的情况下,仅仅是绘制屏幕上的点,顺序执行的时间是小于在线程上的开销的。

其次,你得清楚你的程序为什么慢。如果你绘制一个复杂的图形,发现很卡的话,那么我告诉你,这肯定不是绘制图形慢,而是你程序的分工不明确。将耗时操作放在了绘图的线程里,或者是复杂的计算冗余在一起。

最后我想说,多线程绘图一定是存在的。如果你确实需要使用多线程绘图,其实很简单,正如当时一个人让我恍然大悟。如果绘制一个极为复杂的图形,可以在内存中对这个图形进行分区绘制,然后,将这块内存交给主线程让它显示在屏幕上不就得了。这样不就相当于一张贴图吗。

记住,最最最最主要的目的就是避免主线程的耗时操作。



版权声明:本文为nightwizard2030原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。