多线程的应用!

来源:互联网 发布:目前java主流开发框架 编辑:程序博客网 时间:2024/04/30 12:55
1.多线程建议使用信号量来控制线程,可以使线程稳定一些
2.多线程中若要赋值全局或程序集变量要进入许可区,赋值完毕后退出
3.线程中尽量少使用界面组件,取某组件的内容的话应该不会怎么,不过如果多线程需要对同一个组件赋值的话那得先进入许可区(超级列表框这种类型的会好点,毕竟较赋值的列和项目不同)
4.在线程中很要注意的,尽量避免使用编码转换,编码转换会使线程很不稳定,原因我也不知道,若需要的话也要先进入许可区,完后退出
5.在线程中尽量避免多线程调用用一个子程序,若真有这需要,就把子程序写在类中调用
6.创建线程后的线程句柄,若无需使用则早点关闭(关闭线程句柄不会影响线程执行)
7.使用易语言的标签反馈事件,据说使用标签反馈事件线程会更稳定,不过会有点慢,和卡,我没测试过这个,,,
8.CPU亲和性,多核的CPU有可能出现CPU亲和性问题,
据说这个函数可以解决“
SetThreadIdealProcessor
9.强烈反对使用易语言的“强制结束线程()”命令,改命令会导致线程占据的系统资源未被释放,等等坑爹事
10.共享资源读写要加锁,这是常识,和第二条差不多
11.线程中使用“处理事件”是无用的
     信号量的介绍:
信号量就比如一个容器,创建一个线程他的就给他的空闲区就-1,而线程执行完毕就给他的空闲区+1,当线程数达到了你设置的容量,则就会自动等待,到有空闲了信号才会给他继续创建线程
   临界区(许可区):
当进入许可区时,程序内所有其他线程执行到也准备执行许可区内的代码的时候,就会进入挂起状态,等到他退出许可区,下一个线程才会开始,相互排斥,
  互斥量
互斥量与临界区类似,不同的是互斥量可以跨越进程,而临界区只能在自身进程内,当然互斥量速度是比临界区稍慢了一点

                      总结:多线程崩溃的原因大多数是,比如a在重新赋值n资源届时另一个线程的
b也要访问n资源,b获取到的内存指针是原来没被a修改的指针,而当b访问n资源时,这时n资源已经被a给修改了,导致内存错误,在易语言的多线程中不能使用编码转换,读取配置项,取现行时间(),等,这些命令本身就不支持多线程,然后,就没有然后了

           纯手打,边想边打,打了一个多小时,我也是小菜鸟,如果有说的不对的地方,
或者你有更好的想法就请回复说下吧,非常感谢!


0 0