2020年汇编实验8 多线程_第1页
2020年汇编实验8 多线程_第2页
2020年汇编实验8 多线程_第3页
2020年汇编实验8 多线程_第4页
2020年汇编实验8 多线程_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验8 多线程实验目的:在掌握基于消息的Windows程序结构和多线程程序设计方法的基础上,设计一个多线程同步程序。使学生能够从程序设计的角度了解多线程程序设计的方法和在Windows系统下多线程同步互斥的机制。单一线程同时控制计数器和按钮对计数器的控制时主线程会一直循环在计数器内进行计数 无法完成对对话框里按钮以及文本等控件的控制导致对话框程序卡死而进程在后台计数可以创建一个新线程来完成对 控件的控制工作(函数)单线程计数器: 图1双线程计数器: 图2 图3 图4图5程序代码如下:Thread.asm: .386 .model flat, stdcall option casemap :none; Include 文件定义;include windows.incinclude user32.incincludelib user32.libinclude kernel32.incincludelib kernel32.lib; Equ 等值定义;ICO_MAIN equ 1000DLG_MAIN equ 1000IDC_COUNTER equ 1001IDC_PAUSE equ 1002; 数据段; .data?hInstance dd ?hWinMain dd ?hWinCount dd ?hWinPause dd ? dwOption dd ?F_PAUSE equ 0001hF_STOP equ 0002hF_COUNTING equ 0004h .constszStop db 停止计数,0szStart db 计数,0; 代码段; .code;_Counter proc uses ebx esi edi,_lParam;按钮控制 or dwOption,F_COUNTING and dwOption,not (F_STOP or F_PAUSE) invoke SetWindowText,hWinCount,addr szStop ;改变按钮的文本内容为停止 invoke EnableWindow,hWinPause,TRUE;使暂停按钮可用 xor ebx,ebx .while ! (dwOption & F_STOP);如果不是停止 .if !(dwOption & F_PAUSE);如果不是暂停 inc ebx invoke SetDlgItemInt,hWinMain,IDC_COUNTER,ebx,FALSE ;将ebx+1后的显示到对话框文本 .endif .endw invoke SetWindowText,hWinCount,addr szStart;将按钮文本显示为开始 invoke EnableWindow,hWinPause,FALSE;禁用暂停按钮 and dwOption,not (F_COUNTING or F_STOP or F_PAUSE) ret _Counter endp;_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam local dwThreadID mov eax,wMsg;* .if eax = WM_COMMAND;点击消息 mov eax,wParam .if ax = IDOK;点了开始计数 .if dwOption & F_COUNTING or dwOption,F_STOP .else invoke CreateThread,NULL,0,offset _Counter,NULL, NULL,addr dwThreadID ;创建运行_Counter按钮控制的的新线程 invoke CloseHandle,eax .endif .elseif ax = IDC_PAUSE xor dwOption,F_PAUSE;如果点了暂停 将存储pause发送给控制暂停的另个线程 .endif;* .elseif eax = WM_CLOSE invoke EndDialog,hWnd,NULL;* .elseif eax = WM_INITDIALOG;对话框创建完毕而未显示时 push hWnd pop hWinMain invoke GetDlgItem,hWnd,IDOK;将参数IDOK的句柄赋给hWinCount mov hWinCount,eax invoke GetDlgItem,hWnd,IDC_PAUSE;将参数IDPAUSE的句柄赋给hWinPause mov hWinPause,eax;* .else mov eax,FALSE ret .endif mov eax,TRUE ret _ProcDlgMain endp;start: invoke GetModuleHandle,NULL mov hInstance,eax invoke DialogBoxParam,eax,DLG_MAIN,NULL,offset _ProcDlgMain,NULL;创建模态对话框 invoke ExitProcess,NULL; end startthraedr.rc:/#include /#define ICO_MAIN 1000#define DLG_MAIN 1000#define IDC_COUNTER 1001#define IDC_PAUSE 1002/ICO_MAIN ICON Main.ico/DLG_MAIN DIALOG 227, 187, 129, 48STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENUCAPTION 计数器FONT 9, 宋体 LTEXT 计数值:, -1, 10, 10, 34, 8 EDITTEXT IDC_COUNTER, 47, 8, 71, 12, ES_READONLY |

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论