易语言api CreateThread启动线程传递多个类型参数

易语言自动启动线程命令(),其实就是对API CreateThread的封装,我们如何启动线程的时候让它传递多个参数,并且类型可以是整数,是文本,在前面几个文章里,讲解了启动线程传参文本型,多个参数等等,今天我们用自定义数据结构类型的方式来实现,使用lstrcat该函数将字符串lpString2附加在另一个字符串lpString1后面从而实现多参数的传递。可以先参考以下两篇文章了解多线程的传参。

易语言启动线程传递文本参数
易语言启动线程传递多个类型变量

自定义传递的参数结构这里我们只定义了文本和整数,你要传递其他的,可以再定义几个,或者多个。

易语言api CreateThread启动线程传递多个类型参数_第1张图片

.版本 2
 
.数据类型 参数结构
    .成员 整数, 整数型
    .成员 文本, 文本型

封装 API_启动线程

第二参数是我们传递的参数,这里先定义成整数

易语言api CreateThread启动线程传递多个类型参数_第2张图片

.版本 2
.子程序 API_启动线程, 整数型
.参数 子程序指针, 子程序指针
.参数 整数参数, 整数型, 可空
.局部变量 hThread, 整数型
 
hThread = CreateThread (0, 0, 子程序指针, 整数参数, 0, 0)  ' 返回线程句柄
CloseHandle (hThread)  ' 关闭线程句柄
返回 (hThread)

多参传递调用示范

先定义一个变量:参数结构,它的类型就是我们自定义的数据结构类型,
通过lstrcatA (参数结构, 0)进行参数传递。

易语言api CreateThread启动线程传递多个类型参数_第3张图片


.版本 2
 
.局部变量 参数结构, 参数结构, 静态
 
参数结构.整数 = 20200606
参数结构.文本 = “文本型内容”
API_启动线程 (&线程主线程, lstrcatA (参数结构, 0))

线程主线程

在启动的线程主线程里,我们采用了RtlMoveMemory (参数结构, 参数, 4 × 2) ' 复制内存 结构数据,把传递进来的参数给接受过来。

易语言api CreateThread启动线程传递多个类型参数_第4张图片

.版本 2
 
.子程序 线程主线程
.参数 参数, 整数型
.局部变量 参数结构, 参数结构
 
RtlMoveMemory (参数结构, 参数, 4 × 2)  ' 复制内存 结构数据
输出调试文本 (参数结构.文本, 参数结构.整数)
用到的API
.版本 2
 
.DLL命令 RtlMoveMemory
    .参数 Destination, 参数结构, 传址
    .参数 Source, 整数型
    .参数 Length, 整数型
 
.DLL命令 lstrcatA, 整数型, , "lstrcatA"
    .参数 lpString1, 参数结构, 传址, 此参数结构可以自定义
    .参数 lpString2, 整数型, 传址
 
.DLL命令 CreateThread, 整数型
    .参数 lpThreadAttributes, 整数型
    .参数 dwStackSize, 整数型
    .参数 lpStartAddress, 子程序指针
    .参数 lpParameter, 整数型
    .参数 dwCreationFlags, 整数型
    .参数 LpthreadId, 整数型, 传址
 
.DLL命令 CloseHandle, 逻辑型
    .参数 hObject, 整数型

你可能感兴趣的:(算法,开发语言,易语言,多线程)