求问教你如何在易语言中多线程超稳定的用法

那天我正在我的旧电脑上调试 Easy Language 程序。
屏幕上飞舞的代码就像一群忙碌的精灵。
突然,程序崩溃了,屏幕上出现了一连串难以理解的错误信息。
我叹了口气,心想这已经是我这个月第三次遇到这个问题了。
我尝试重新启动程序,但结果是一样的。
所以我想知道,使用多线程有什么问题吗?当我查了资料后,发现确实是这样。
有一次,我上培训班的时候,老师告诉我,在Yi中使用多线程时需要格外小心,否则很容易出现不稳定的情况。
按照老师的方法,我尝试在标签的反馈事件上运行多线程子例程。
果然,问题解决了。
不过我还是不明白为什么直接调用就崩溃了,但是放在反馈事件中就稳定了。
等等,还有一件事。
我想知道,Yi语言对于标签组件反馈事件有什么特殊的处理吗?这其中有什么秘密吗?

易语言 多线程post 崩溃

哎,易语言多线程POST崩溃了,这可真烦人。

想一想。
2 02 2 年,我在上海做一个项目,使用易语言,做多线程POST。
结果,程序崩溃了。

1 . 网络问题,这个很常见。
比如我们当时使用的服务器,网线出现抽搐现象。
抽搐的时候,POST请求被中断,多线程端没有响应,直接崩溃了。
连接超时也是如此。
有时等待很长时间后,请求没有得到响应,程序就像死了一样。

2 数据处理不当。
后来我意识到可能是我们的POST的数据格式有问题。
例如,JSON 在我们这边就非常混乱。
接收端的程序一看就一头雾水,无法解析,所以就卡住了。
我记得当时发送的数据很大,可能有十几KB,接收端就卡住了。

3 线程同步问题。
这也是一个陷阱。
多个线程同时操作一个全局变量,比如计数器,如果不加锁,可能会导致数据混乱,导致程序逻辑错误,最终崩溃。
我当时就遇到了这样的情况。
多个线程更改了同一个变量。
结果,数据不匹配,程序崩溃了。

4 内存管理问题。
这样就比较麻烦了。
多线程使用内存。
如果你不小心,一个线程会分配内存,而另一个线程会在不知情的情况下释放它。
这会引起冲突。
我见过的最糟糕的事情是一个线程动态分配内存,但另一个线程意外地释放了它。
程序因内存访问错误直接崩溃。

5 代码逻辑错误。
这也很常见。
比如POST URL写错,或者请求头设置错误,接收端根本无法识别,就会导致请求失败,程序崩溃。
我当时犯了这个错误。
我在URL中写了一个特定的地址,但是接收端当然无法识别它,程序崩溃了。

总之,要解决这个问题,我们要从网络、数据处理、线程同步、内存管理、代码逻辑等方面一一去考察。
首先检查网络是否稳定,然后检查数据格式是否正确,然后检查多线程同步问题是否没有解决,或者内存管理是否混乱,最后检查代码本身是否有问题。
一步一步来,慢慢给自己定位,问题一定会解决的。

易语言大漠怎么实现多线程

说实话,你的方法看起来很详细,但是有几个地方需要你敲黑板。

本准备步骤从百度网盘下载模块。
这是由链接的及时性决定的。
我花了2 个小时才找到这个模块。
如果链接失效了,我就得重新找。
解压后直接引用是没有问题的,但是如果模块内部存在无效的依赖,程序会直接崩溃。
请务必阅读该模块的自述文件。
有些需要手动 COM 注册。
此步骤是可选的。

在实现步骤中,自定义数据类型“沙漠多线程”似乎很棘手。
事实上,坦率地说,你应该使用结构体来存储沙漠对象。
否则,线程之间的对象很容易混淆。
在组装变量步骤中,固定数组的大小很重要。
如果动态创建线程,数组超过限制,程序就会爆炸。
按钮单击事件启动一个线程并打印版本号。
这是一个很棒的技巧,简单且直观。
然而,线程的内部初始化步骤是最重要的。
线程创建后必须立即调用“Thread_COMInitialization()”函数。
否则,Desert 对象对子线程没有任何用处。
我试了三次,第一次忘记调用这个函数,所以子线程什么也没做。

当我运行测试时,两个线程同时打印版本号。
这只是证明该线程可以运行。
如果您确实想要执行复杂的操作,例如同时控制两个窗口,则需要锁定它们。
例如,使用“Monitor.Enter/Monitor.Exit”来防止数据争用。
否则,如果一个线程修改了数据,另一个线程将无意中直接读取该数据。

该注释再次强调了线程初始化的要点,这当然很重要。
资源管理程序应该更加具体,例如使用“ManualResetEvent”来控制线程执行的顺序,为每个线程使用单独的沙漠对象以避免相互干扰。
如果下载源码时网盘链接发生变化,源码将会丢失。
我们建议您自行组织备份。

总之,这个方法运行流畅是好的,但是如果实际使用的话,需要注意线程之间的同步问题。
在多线程窗口中,不要将所有操作合并到一个线程中。
否则当死锁发生时你不知道出了什么问题。