汇编学习之多线程技术的实现

在现在我们调试程序的时候经常会碰到多线程的程序,而且的确多线程由于可以实现一个程序中实现多个任务,所以在今天的程序中运用的也比较多,但是实现它高级语言和汇编会有什么区别呢?怎么实现呢?
  首先说明一下每一个线程都有自己独立的堆栈,局部变量也是私有的

创建线程的语法是

代码:
CreateThread  proto lpThreadAttributes:DWORD,
        dwStackSize:DWORD,
        lpStartAddress:DWORD,
        lpParameter:DWORD,
        dwCreationFlags:DWORD,
        lpThreadID:DWORD
        线程函数通过ret返回,windows会隐含调用ExitThread,所以可以不用手动调用ExitThread,类似与vc中CreateThread函数的结束过程,极力不推荐用TerminateThread函数来结束线程的,因为这个函数直接结束线程,而线程没有进行清理,容易丢失数据或内存泄露。

  事件对象问题,事件对象处于无信号状态,表示线程“睡眠”,线程不接受CPU时间片,当处于有信号状态,windows唤醒线程,进入CPU时间片
言归正传,实现代码


代码:
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM,lParam:LPARAM
  
  
  .IF uMsg == WM_COMMAND
    mov eax,wParam
    .if lParam ==0
      .if ax == IDM_CREATE_THREAD
        mov eax,OFFSET ThreadProc
        invoke CreateThread,NULL,eax,0,ADDR ThreadID
        invoke CloseHandle,eax
      .else
        invoke DestroyWindow,hWnd
      .endif
    .endif
  .endif
  ret

WndProc endp
程序中调用了关闭句柄,但是关闭线程句柄是不会关闭线程运行的,只是说以后不用这个句柄了,所以要注意!