Win32汇编——多线程

来源:互联网 发布:黑客最喜欢的linux系统 编辑:程序博客网 时间:2024/06/05 07:25
1.线程间通信方法:(3种)
       使用全局变量
        通过发送消息
        通过事件对象


2.有关函数:
创建线程:CreateThread
线程函数:
_ProcThread procuses ebx esi edi,lParam
local 局部变量
...
mov eax,返回码
ret
_ProcThread endp


获得退出码:GetExitCodeThread
终止线程的方法:(4种)
       自然退出,即ret (建议使用)
       ExitThread,只能终止当前进程
       TerminateThread,异步执行,不建议使用
       ExitProcess结束进程
挂起线程:SuspendThread
恢复线程:ResumeThread


3.线程对象会一直保存到使用CloseHandle函数关闭线程句柄为止


4.事件:是一种对象,可以认为是Windows内部的标志,它的状态设置和测试工作由Windows来完成
创建事件:CreateEvent
“置位”:SetEvent
“复位”:ResetEvent
等待事件:WaitForSingleObject、WaitForMultipleObject


5.线程间同步
事件(Event)、临界区(Critical Section)、互斥量(Mutex)、信号灯(Semaphore)
5.1使用事件对象同步:只需在CreateEvent 时将bManualReset 指定为FALSE ,然后在需要独占的代码前添加WaitForSingleObject 在代码后添加 SetEvent 即可。
事件对象可用于多个进程的线程同步,只需创建命名的事件对象,然后在其他进程中使用OpenEvent函数打开命名对象使用。
不使用时,调用CloseHandle关闭对象。
5.2使用临界区对象同步:临界区对象是定义在数据段中的一个CRITICAL_SECTION 结构,由Windows维护和测试,结构应当定义为全局变量,以供各线程使用
涉及函数:
InitializeCriticalSection
EnterCriticalSection
LeaveCriticalSection
DeleteCriticalSection
临界区对象无法命名,所以无法垮进程使用,但是相比其他方法高效的多
5.3使用互斥量对象同步:使用CreateMutex 创建互斥量对象,然后在需要独占的代码前添加WaitForSingleObject 在代码后添加 ReleaseMutex 即可。
互斥量对象也是可命名的,在其他进程中使用OpenMutex 打开。
不使用时,调用CloseHandle关闭对象。
5.4使用信号灯对象同步:是一个允许指定数量的线程获取的对象,一般用于线程排队
使用CreateSemaphore 创建互斥量对象,然后在需要独占的代码前添加WaitForSingleObject 在代码后添加 ReleaseSemaphore 即可。
信号灯对象也是可命名的,在其他进程中使用OpenSemaphore 打开。
不使用时,调用CloseHandle关闭对象。


PS:我去啊,今晚下冰雹了,窗外的雨像是要扑进来吃了我似的,门也左摇右晃,还断网几次,这次笔记实在不易啊!!——2011.08.18 19:36
原创粉丝点击