文章目录[隐藏]
线程启动用到的API函数CreateThread,该函数在主线程的基础上创建一个新线程。线程终止运行后,线程对象仍然在系统中,必须通过CloseHandle函数来关闭该线程对象。
函数CreateThread
--------------------------------------------------
第二课:CreateThread(线程_启动)
--------------------------------------------------
.版本 2
.DLL命令 CreateThread, 整数型, , "CreateThread", 公开, 线程_启动
.参数 lpThreadAttributes, 整数型
.参数 dwStackSize, 整数型
.参数 lpStartAddress, 子程序指针
.参数 lpParameter, 整数型
.参数 dwCreationFlags, 整数型, , 控制线程创建的标志。如果指定了CREATE_SUSPENDED标志,是创建线程处于暂停状态,并不会运行,直到ResumeThread函数被调用。如果这个值是零,线程创建后立即运行
.参数 lpThreadId, 整数型, 传址
函数说明:
该函数在主线程的基础上创建一个新线程
当使用CreateProcess调用时,系统将创建一个进程和一个主线程。CreateThread将在主线程的基础上创建一个新线程,大致做如下步骤:
1在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回
2把线程退出码置为STILL_ACTIVE,把线程挂起计数置1
3分配context结构
4分配两页的物理存储以准备栈,保护页设置为PAGE_READWRITE,第2页设为PAGE_GUARD
5lpStartAddr和lpvThread值被放在栈顶,使它们成为传送给StartOfThread的参数
6把context结构的栈指针指向栈顶(第5步)指令指针指向startOfThread函数
第一个参数表示线程内核对象的安全属性,一般传入NULL表示使用默认设置。是指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,它被设为NULL。//线程安全属性
第二个参数表示线程栈空间大小。传入0表示使用默认大小(1MB)。// 堆栈大小
第三个参数表示新线程所执行的线程函数地址,多个线程可以使用同一个函数地址。// 线程函数
第四个参数是传给线程函数ThreadProc的参数。这样主线程和从属线程就可以共享数据。 //线程参数
第五个参数指定额外的标志来控制线程的创建,为0表示线程创建之后立即就可以进行调度,如果为CREATE_SUSPENDED则表示线程创建后暂停运行,这样它就无法调度,直到调用ResumeThread()。// 线程创建属性
第六个参数将返回线程的ID号,传入NULL表示不需要返回该线程ID号。// 线程ID
函数返回值:
成功返回新线程的句柄,失败返回0。
封装源码
.版本 2
.程序集 集_线程
.子程序 线程_启动, 整数型, 公开, 成功返回新线程的句柄,失败返回0
.参数 要启动的子程序, 子程序指针, , 要启动的子程序
.参数 要传去子程序的参数, 整数型, 可空, 给子程序传递一个整数型的参数
.参数 线程ID, 整数型, 参考 可空, 提供一个整数型的变量用来存放新创建的线程的线程ID
返回 (CreateThread (0, 0, 要启动的子程序, 要传去子程序的参数, 0, 线程ID))
优酷土豆链接:511遇见易语言模块API教程-2-线程启动
优酷全部教程播单:http://i.youku.com/i/UNTU3NDYyODg0/playlists
交流群:521068947
本人QQ: 272586593