好友
阅读权限20
听众
最后登录1970-1-1
|
ajm3
发表于 2016-6-1 18:42
本帖最后由 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进行通信;
另外,线程与窗口通信可以用消息进行通信,缺点就是窗口无法主动发消息给线程,只能是被动的接收线程的消息。
MAC扫描器.rar
(3.43 KB, 下载次数: 10)
查看开机的时间.rar
(1.81 KB, 下载次数: 12)
查找文件.rar
(10.3 KB, 下载次数: 11)
传奇2登陆器.rar
(268.73 KB, 下载次数: 12)
传奇人数检测器.rar
(1.48 KB, 下载次数: 6)
读传奇2地图.rar
(41.93 KB, 下载次数: 2)
滚动条.rar
(1.15 KB, 下载次数: 5)
滚动条32位化模块.rar.rar
(11.46 KB, 下载次数: 1)
监视剪辑板.rar
(2.96 KB, 下载次数: 3)
快速字节集类.rar
(5.56 KB, 下载次数: 1)
浅谈多线程.rar
(18.45 KB, 下载次数: 17)
树型数据类.rar
(3.69 KB, 下载次数: 3)
网络封包截取器1.0.rar
(264.15 KB, 下载次数: 33)
网页操作类.rar
(48.62 KB, 下载次数: 21)
线程模块.rar
(2.52 KB, 下载次数: 11)
易语言代码框截图.rar
(12.24 KB, 下载次数: 14)
字符与字节集代码互换.rar
(2.67 KB, 下载次数: 9)
还有很多收集的作品,有需要的我再发吧,先发一点。大多数都是收集的,自己编的比较少
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|