第5课:线程的调度和线程的优先级

线程优先级相同的情况,cpu可以运行一个线程大约20ms。而在系统中的线程有不同的优先级,这将影响调度程序如何选择下一个可调度线程,系统分配cpu时,会先分配给优先级高的线程。但是高优先级的不一定是可调度状态,所以低有先级的也会执行到

系统默认优先级别为0

.版本 2

.DLL命令 GetCurrentThreadId, 整数型, "kernel32.dll", "GetCurrentThreadId", , 获取当前线程一个唯一的线程标识符

.DLL命令 Sleep_, 整数型, "kernel32.dll", "Sleep", , 用于将运行中的程序暂停(毫秒)
    .参数 dwMilliseconds, 整数型, , 要暂停的时间(毫秒),若设为 INFINITE 那么就一直等待

.DLL命令 WaitForMultipleObjects, 整数型, "kernel32.dll", "WaitForMultipleObjects", , 监测一个对象的状态,如事件对象,线程,进程
    .参数 nCount, 整数型, , 对象句柄的数量
    .参数 lpHandle, 整数型, , 指向一组句柄的变量
    .参数 bWaitAll, 逻辑型, , 如果指定为TRUE,函数仅在所有对象的状态都变成 置位 时才返回 如果指定FALSE ,任意一个对象的状态变成 置位 时都返回
    .参数 dwMilliseconds, 整数型, , 指定以ms为单位的超时时间

.DLL命令 WaitForSingleObject, 整数型, "kernel32.dll", "WaitForSingleObject", , 监测一个对象的状态,如果对象是置位状态表示就继续运行此函数下面的程序,如果是复位状态,就让下面的程序进入等待状态. 如事件对象,线程,进程
    .参数 hHandle, 整数型, , 指定为等待的对象句柄(一般就是用 CreateEvent 创建的事件句柄)
    .参数 dwMilliseconds, 整数型, , 指定以ms为单位的超时时间0为立即返回或INFINITE(-1)无限等待

.DLL命令 GetThreadPriority, 整数型, "kernel32", "GetThreadPriority", , 获取线程的优先级
    .参数 hThread, 整数型, , 0

.DLL命令 ResumeThread, 整数型, "kernel32.dll", "ResumeThread", , 启动被挂起的线程,当计数值减到0的时候,线程被恢复运行.成功则返回原来的暂停计数值,-1表示失败。
    .参数 hThread, 整数型, , 要启动的线程

.DLL命令 SetThreadPriority, 逻辑型, "kernel32", "SetThreadPriority", , 设置线程的优先级,成功返回非0,失败返回0
    .参数 hThread, 整数型, , 0
    .参数 nPriority, 整数型, , 0

.DLL命令 CreateThread, 整数型, "kernel32.dll", "CreateThread", , 创建一个新的线程,创建完毕会立即返回。成功则返回新线程的句柄,零表示失败
    .参数 lpThreadAttributes, 整数型, , 指向一个SECURITY_ATTRIBUTES结构,主要用来指定句柄是否可以被继承,如果让线程使用默认的安全属性,可以将此值设为 NULL
    .参数 dwStackSize, 整数型, , 线程堆栈大小,如果为0,那么线程的堆栈大小和主线程使用的大小相同
    .参数 lpStartAddress, 子程序指针, , 线程的开始执行地址,指向一个新线程函数(过程)的指针
    .参数 lpParameter, 整数型, , 传递给自定义参数,传递给子线程的参数,0为无限止
    .参数 dwCreationFlags, 整数型, , 设置线程被创建后的状态,如果为0表示,创建后立即运行,如果为CREATE_SUSPENDED(4)标志,表示线程被创建后处于挂志状态,直到使用ResumeThread函数显式地启动线程为止
    .参数 lpThreadId, 整数型, 传址, 指向一个双字节变量,用来接收函数返回的线程ID.线程ID在系统范围内是唯一的.
.版本 2
.支持库 spec


.程序集 程序集1


.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
.局部变量 hThread1, 整数型
.局部变量 hThread2, 整数型
.局部变量 id1, 整数型
.局部变量 id2, 整数型


hThread1 = CreateThread (0, 0, &fun_thread, 1, 0, id1)  ' 第5个参数为0 ,创建线程后立即执行,


hThread2 = CreateThread (0, 0, &fun_thread, 2, 4, id2)  ' 第5个参数为4,创建线程后挂起等待恢复


调试输出 (SetThreadPriority (hThread1, 15))  ' 线程优先级高的先执行完成
调试输出 (SetThreadPriority (hThread2, 2))


调试输出 (GetThreadPriority (hThread1))
调试输出 (GetThreadPriority (hThread2))


ResumeThread (hThread2)  ' 恢复第二条挂起的线程






WaitForSingleObject (hThread1, -1)
WaitForSingleObject (hThread2, -1)




调试输出 (“finished!!!”)




返回 (0)  ' 可以根据您的需要返回任意数值


.子程序 fun_thread
.参数 par, 整数型
.局部变量 i, 整数型


.计次循环首 (500, i)
    输出调试文本 (到文本 (par) + “|” + 到文本 (i))
.计次循环尾 ()







猜你喜欢

转载自blog.csdn.net/qq_28710983/article/details/80115980