当前位置:首页 > 网络编程 > 软件语言 > 汇编 > 事件对象

事件对象

点击次数:48 次 发布日期:2008-11-10 08:13:13 作者:源代码网
源代码网推荐
广告载入中
事件对象:

源代码网整理以下  本课中我们将要学习事件对象以及如何在多线程编程中如何使用同步对象。
源代码网推荐理论:
源代码网推荐上一课中我们演示了如何用WINDOWS消息在不同的线程之间进行通讯。另外的两种,即:使用全局变量和事件对象,将在本课中讲解。
源代码网推荐事件对象就像一个开关:它只有两种状态---开和关。当一个事件处于”开”状态,我们称其为”有信号”否则称为”无信号”。您可以在一个线程的执行函数中创建一个事件对象,然后观察它的状态,如果是”无信号”就让该线程睡眠,这样该线程占用的CPU时间就比较少。
源代码网推荐产生事件对象的函数如下:
源代码网推荐CreateEvent proto lpEventAttributes:DWORD,
源代码网推荐bManualReset:DWORD,
源代码网推荐bInitialState:DWORD,
源代码网推荐lpName:DWORD

源代码网整理以下lpEventAttribute--> 如果是NULL值,产生的事件对象有缺省的安全属性。
源代码网推荐 bManualReset--> 如果想在每次调用WaitForSingleObject 后让WINDOWS为您自动地把事件地状态恢复为”无信号”状态,必须把该参数设为FALSE,否则,您必须每次调用ResetEvent函数来清除事件的信号。
源代码网推荐 bInitialState--> 刚刚产生事件对象时的状态。如果设为TRUE是”有信号”,否则是”无信号”。
源代码网推荐 lpName --> 事件对象的名称。您在OpenEvent函数中可能使用。

源代码网整理以下如果CreateEvent调用成功的话,会返回新生成的对象的句柄,否则返回NULL。
源代码网推荐 这里有两个API函数用来修改事件对象的信号状态:SetEvent和ResetEvent。前者把事件对象设为”有信号”状态,而后者正好相反。
源代码网推荐 在事件对象生成后,必须调用WaitForSingleObject来让线程进入等待状态,该函数的语法如下:

软件开发网 www.mscto.com

源代码网整理以下WaitForSingleObject proto hObject:DWORD, dwTimeout:DWORD

源代码网整理以下hObject -->指向同步对象的指针。事件对象其实是同步对象的一种。
源代码网推荐 dwTimeout --> 等待同步对象变成”有信号”前等待的时间,以毫秒计。当等待的时间超过该值后无信号同步对象仍处于”无信号”状态,线程不再等待,WaitForSingleObject函数会返回。如果想要线程一直等待,请把该参数设为INFINITE(该值等于0xffffffff)。

源代码网整理以下例子:
源代码网推荐 下面的例子显示了一个窗口,当用户选择了菜单项”run thread”后,线程开始简单的计数运算。结束后弹出一个对话框通知用户。在整个的计数期间,您可以选择菜单项”stop thread”来随时终止线程。
源代码网推荐 .386
源代码网推荐 .model flat,stdcall
源代码网推荐 option casemap:none
源代码网推荐 WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
源代码网推荐 include masm32includewindows.inc
源代码网推荐 include masm32includeuser32.inc
源代码网推荐 include masm32includekernel32.inc
源代码网推荐 includelib masm32libuser32.lib
源代码网推荐 includelib masm32libkernel32.lib

源代码网整理以下.const
源代码网推荐 IDM_START_THREAD equ 1
源代码网推荐 IDM_STOP_THREAD equ 2
源代码网推荐 IDM_EXIT equ 3
源代码网推荐 WM_FINISH equ WM_USER 100h

源代码网整理以下.data
源代码网推荐 ClassName db "Win32ASMEventClass",0
源代码网推荐 AppName db "Win32 ASM Event Example",0
源代码网推荐 MenuName db "FirstMenu",0
源代码网推荐 SuccessString db "The calculation is completed!",0
源代码网推荐 StopString db "The thread is stopped",0
源代码网推荐 EventStop BOOL FALSE

源代码网整理以下.data?
源代码网推荐 hInstance HINSTANCE ?
源代码网推荐 CommandLine LPSTR ?
源代码网推荐 hwnd HANDLE ?
源代码网推荐 hMenu HANDLE ?
源代码网推荐 ThreadID DWORD ?
源代码网推荐 ExitCode DWORD ?
源代码网推荐 hEventStart HANDLE ?

源代码网整理以下.code
源代码网推荐 start:
源代码网推荐 invoke GetModuleHandle, NULL
源代码网推荐 mov hInstance,eax
源代码网推荐 invoke GetCommandLine


源代码网推荐

源代码网供稿.
上一篇: 进一步学习对话框  下一篇: 多线程编程
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华