⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 event.asm

📁 windows汇编语言程序设计 吴中平著 一书所附所有源代码。 该书重点讲解了Windows环境下汇编语言程序设计的基本原理及其实现过程
💻 ASM
字号:
include head.inc
ModalDlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.const
IDD_DIALOG                 equ  101
IDC_COUNT                  equ 1000
IDC_CREATE                 equ 1001
WM_THREADDATA       equ WM_USER+1
.data
.data?
hThreadPass    HANDLE  ?
hThreadInc      HANDLE  ?
hThreadDec      HANDLE  ?
hEvent             HANDLE  ?
Counter            dd           ?
ThreadID         dd          ?
.code
start:
   invoke DialogBoxParam,NULL,IDD_DIALOG,NULL,addr ModalDlgProc,NULL
   invoke ExitProcess,eax

ModalDlgProc proc uses edi hWnd:dword,uMsg:dword,wParam:dword,lParam:dword
   .if uMsg==WM_INITDIALOG
      push hWnd
      pop hThreadPass
      invoke CreateEvent,NULL,FALSE,FALSE,NULL
      mov hEvent,eax
      mov Counter,0ffffh
   .elseif  uMsg==WM_COMMAND
      .if  lParam
         mov eax,wParam
         .if  ax==IDC_CREATE
            mov eax,offset ThreadProcInc
            invoke CreateThread,NULL,NULL,eax,addr hThreadPass,0,addr ThreadID
            mov hThreadInc,eax
            mov eax,offset ThreadProcDec
            invoke CreateThread,NULL,NULL,eax,addr hThreadPass,0,addr ThreadID
            mov hThreadDec,eax
            invoke GetDlgItem,hWnd,IDC_CREATE
            invoke EnableWindow,eax,FALSE
         .endif
      .endif
   .elseif uMsg==WM_THREADDATA
      invoke SetDlgItemInt,hWnd,IDC_COUNT,wParam,FALSE
   .elseif uMsg==WM_CLOSE
      invoke CloseHandle,hEvent
      invoke CloseHandle,hThreadInc
      invoke CloseHandle,hThreadDec
      invoke EndDialog,hWnd,FALSE
  .else
     mov eax,FALSE
     ret
  .endif
  mov eax,TRUE
  ret
ModalDlgProc endp

ThreadProcInc  proc uses edi param:dword
   invoke WaitForSingleObject,hEvent,INFINITE
   mov edi,param 
   mov ecx,0ffffh 
again:
   inc Counter
   push ecx
   invoke PostMessage ,[edi],WM_THREADDATA,Counter,0
   pop ecx
   loop again
   ret
ThreadProcInc endp

ThreadProcDec  proc uses edi param:dword
   mov edi,param 
   mov ecx,0ffffh 
again:
   Dec Counter
   push ecx
   invoke PostMessage ,[edi],WM_THREADDATA,Counter,0
   pop ecx
   loop again
   invoke SetEvent,hEvent
   ret
ThreadProcDec endp
end start


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -