标题采用《Windows程序设计》精彩的一条名言,多么激动人心的时刻啊。多线程的意义不仅在于开工作业一项费时长的工作,一个进程可以包含一个或多个应用程序域,而一个应用程序域又可以包含一个或多个线程。这样实际上就相当于在进程和线程之间增加了一个新的安全边界。无论在同一个进程之内还是在不同的进程之间,每个应用程序域之间都是相互无关的,这些不同的应用程序域之间只能通过远程通讯来实现消息和对象的传递。
使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于![](http://www.cppblog.com/images/cppblog_com/cass/Thread.gif)
使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。
下面介绍基于Windows多线程的一些用法:
创建:
hThread = CreateThread (&security_attributes(忽略NULL), dwStackSize(初始化堆栈默认O), ThreadProc(处理函数),pParam(额外数据), dwFlags(挂起线程CREATE_SUSPENDEN), &idThread(线程ID)) ;
简单的创建方法:
hThread = _beginthread (ThreadProc, uiStackSize, pParam) ; //创建
void __cdecl ThreadProc (void * pParam) ; //处理函数
_endthread () ; //结束线程
每个进程中访问临界资源的那段代码称为临界区
CRITICAL_SECTION cs ;
InitializeCriticalSection (&cs) ; //初始化
EnterCriticalSection (&cs) ; //进入临界区
LeaveCriticalSection (&cs) ; //离开临界区
DeleteCriticalSection (&cs) ; //删除临界区
PostMessage
该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回,是异步消息模式。消息队列里的消息通过调用GetMessage和PeekMessage取得。
函数原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
事件对象:
(1)、hEvent = CreateEvent ( &sa, fManual, fInitial, pszName) ;
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes, // 安全属性
BOOL bManualReset, // 复位方式
BOOL bInitialState, // 初始状态
LPCTSTR lpName // 对象名称
);
bManualReset:
[输入]指定将事件对象创建成手动复原还是自动复原。如果是TRUE,那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。如果设置为FALSE,当事件被一个等待线程释放以后,系统将会自动将事件状态复原为无信号状态
bInitialState:
[输入]指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。
(2)、SetEvent (hEvent) ; //设置事件的状态的标记
(3)ResetEvent (hEvent) ; //复位事件
(4)WaitForSingleObject (hEvent, dwTimeOut) ; //等待
posted on 2011-04-11 11:20
Yu_ 阅读(199)
评论(0) 编辑 收藏 引用 所属分类:
Windows程序设计