详解易语言启动多线程

时间:2021-12-28 00:12:08

用易语言写多线程应用要么使用多线程相关的api,支持库或模块,其实那些支持库或模块也都是封装的api,但是要比api使用方便。

总体来说易语言官方的多线程支持库要比一些杂七杂八的模块好多了。

详解易语言启动多线程

支持库勾选上之后就可以使用易语言的多线程支持库了。

首先看用易语言多线程支持库创建线程的命令:启动线程:

命令名:启动线程

创建并启动一条线程,可重复使用以创建多条线程,成功返回真,失败返回假。

 

参数 数据类型 说明
  参数<1>的名称为“欲执行的子程序” 子程序指针(SubPtr) 本参数提供创建线程时欲启动的子程序,根据是否需要传递参数数据,该子程序必须没有或具有一个整数型参数,否则将出错。
  参数数据 整数型(int) 可以被省略。本参数提供线程被启动时传递到欲启动子程序的整数数据。如果本参数未被省略,此时被启动子程序必须接收一个整数型参数,否则将出错。
  线程句柄 整数型(int) ,可以被省略,提供参数数据时只能提供变量。如果提供了本参数,将向参数变量写入线程句柄(Windows下为HANDLE,Linux下为pthread_t),请在适当的时机关闭该句柄。如果不提供本参数接收线程句柄,内部将自动处理线程句柄。

 

用易语言多线程支持库启动一条线程(控制台程序下):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.版本 2
.支持库 EThread
 
.程序集 程序集1
.程序集变量 线程句柄, 整数型
 
.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
 
启动线程 (&子程序1, , 线程句柄)
 
返回 (0) ' 可以根据您的需要返回任意数值
 
.子程序 子程序1
 
 
标准输出 (#标准输出设备, “线程已启动,线程句柄为:” + 到文本 (线程句柄))

详解易语言启动多线程

这时候子程序1 将不是在主线程中执行的,而是在线程句柄为552的新线程中执行,和主线程互不相关。

通过下面的代码可以方便我们理解多线程:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.版本 2
 
.程序集 窗口程序集1
 
.子程序 _按钮1_被单击
 
子程序1 ()
 
 
.子程序 子程序1
.局部变量 n, 整数型
 
.计次循环首 (1000, n)
  输出调试文本 (到文本 (n))
.计次循环尾 ()

详解易语言启动多线程

按钮按下之后,循环不结束,界面是不能响应任何消息的额,也就是拖动点击什么的都没用,相当于卡死。
但是如果把按钮下调用的子程序1 ,改为

?
1
启动线程 (&子程序1, , )

则窗口可以正常响应消息,因为创建了一条新的线程来执行子程序1,主线程可以继续处理窗口消息。