文章目录[隐藏]
易语言自动启动线程命令(),其实就是对API CreateThread的封装,我们如何启动线程的时候让它传递多个参数,并且类型可以是整数,是文本,在前面几个文章里,讲解了启动线程传参文本型,多个参数等等,今天我们用自定义数据结构类型的方式来实现,使用lstrcat该函数将字符串lpString2附加在另一个字符串lpString1后面从而实现多参数的传递。可以先参考以下两篇文章了解多线程的传参。
自定义传递的参数结构
这里我们只定义了文本和整数,你要传递其他的,可以再定义几个,或者多个。
.版本 2 .数据类型 参数结构 .成员 整数, 整数型 .成员 文本, 文本型
封装 API_启动线程
第二参数是我们传递的参数,这里先定义成整数
.版本 2
.子程序 API_启动线程, 整数型
.参数 子程序指针, 子程序指针
.参数 整数参数, 整数型, 可空
.局部变量 hThread, 整数型
hThread = CreateThread (0, 0, 子程序指针, 整数参数, 0, 0) ' 返回线程句柄
CloseHandle (hThread) ' 关闭线程句柄
返回 (hThread)
多参传递调用示范
先定义一个变量:参数结构,它的类型就是我们自定义的数据结构类型,
通过lstrcatA (参数结构, 0)进行参数传递。
.版本 2 .局部变量 参数结构, 参数结构, 静态 参数结构.整数 = 20200606 参数结构.文本 = “文本型内容” API_启动线程 (&线程主线程, lstrcatA (参数结构, 0))
线程主线程
在启动的线程主线程里,我们采用了RtlMoveMemory (参数结构, 参数, 4 × 2) ' 复制内存 结构数据,把传递进来的参数给接受过来。
.版本 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, 整数型