【转载源码】收集了点E语言源码,奉献给大家
本帖最后由 ajm3 于 2016-6-9 22:52 编辑浅谈多线程编程
谈谈我自己对多线程上的理解(因本人知识有限,如有不对之处请各位高手多多指正、补充):
一、注意事项
1、虽然启动线程要比启动进程要快,但是启动线程仍是比较耗时的,因此,不要频繁的启动、退出线程,而是启动线程后将各种任务处理完成后才退出(这种和线程池差不多);
2、对窗口各种组件操作,最好是在创建该窗口的线程上进行操作,如果在其它线程上操作,可能会引起程序出错等情况(该错误是随机出现的,未找到直接又安全的调用其他线程创建的组件的方法,有知道的人,麻烦告诉一下,谢谢!)。
3、线程运行次序并不是按照我们创建他们时的顺序来运行的,CPU处理线程的顺序也是不确定的。
4、读/写共享资源时一般需要使用许可区,当然,在明知读/写共享资源不会出现错误时,就不需要许可区,这样可提高性能。
5、在编写多线程时,必须以多线程的方式考虑读/写共享资源,以避免出错,不然的话,可能会出现各种问题,如:意外退出、在单核CPU上可以稳定运行的多线程程序一到多核CPU上运行就出错。
6、线程中如果需要使用COM对象时,要需将COM对象初始化。
二、多线程的误区
1、使用处理事件()。非窗口的线程是没有窗口消息循环,而处理事件()命令是用于消息循环,因此在非窗口的线程上是不必加入“处理事件()”命令;
2、线程越多越好。线程并非越多越好,有些人将单线程改成多线程后,发现程序能处理更多的任务了,实际上这种方法是建立别的程序的痛苦之上(当然系统有空闲资源就并当别论了),别的程序可能因此而变慢。并且,线程数过多,会使CPU在线程间切换的开销增加,因而使速度变慢,降低系统性能。在一些阻塞式、耗资源少的线程上需要适当的增加线程数量,以免程序无响应。
三、许可区
1、许可区(一般称为临界区),不论是硬件许可资源,还是软件许可资源,多个线程必须互斥地对它进行访问,每个线程中访问许可资源的那段代码称为许可区。
2、注意事项:
①、如果有若干线程要求进入许可区,一次仅允许一个线程进入。
②、任何时候,处于许可区内的线程不可多于一个。如已有线程进入自己的许可区,则其它所有试图进入许可区的线程将被挂起,并一直持续到进入许可区的线程退出。
③、创建后许可区,在不再使用时,需要将其删除。
④、在使用许可区时,应尽量减少许可区内代码,避免使用需长时间处理的代码,使进入许可区的线程能尽快退出,以便其它线程能进入许可区。
⑤、避免将整个线程处于许可区内,尽管它不会出错,但是由于后来要求进入许可区的线程全部会被挂起,也就会出现虽然是多线程,但实际是以单线程方式执行。
⑥、访问相同的许可资源时,必须是以相同的许可区进入访问,以不同的许可区进入访问将可能会使许可区变的无意义(我在这个坑里蹲了很久,郁闷啊!)。
三、线程之间通信
1、使用全局变量进行通信,推荐使用这种方法,该是最快、最方便的通信方式;
2、使用事件进行通信;
3、使用Socket进行通信;
另外,线程与窗口通信可以用消息进行通信,缺点就是窗口无法主动发消息给线程,只能是被动的接收线程的消息。
还有很多收集的作品,有需要的我再发吧,先发一点。大多数都是收集的,自己编的比较少
这种分享方式。。骗CB来的吧。。。 点击下载 发表于 2016-6-2 13:33
你放在百度盘或者360里面,直接给个链接不就可以了吗。
由于源码真的都是人工编写的,一行一句。。你下载应该看得到。至少不是在百度能搜到的,所以 这样下载也没什么不对啊 对于楼主这种行为呵呵二字足以表达 w4526423 发表于 2016-6-1 18:57
对于楼主这种行为呵呵二字足以表达
转载不好吗?还不是有人在下载,说明还是有价值的啊 我也只能呵呵 百度云可以原谅 sunset920 发表于 2016-6-1 19:04
这种分享方式。。骗CB来的吧。。。
你下载,我能得CB吗? 谢谢楼主分享 只要问心无愧,又何必在乎别人咋说呢,支持楼主! 我也还在研究多线程,虽然不是易语言的,但原理是一样的。都是 createthread ,我写的某个多线程程序就在win10 蛋疼了。。。 感谢分享