Windows 95多线程间同步事件的控制方法

摘要:在Windows 95中所有的应用程序实际上都以是线程的方式运行的。在设计多线程应用程序中有时必须在线程之间保持一定的同步关系,才能使用户能够对独立运行的线程进行有效的控制。为此本文在简要介绍Windows 95中线程的概念及其创建方法后,提出了一种在多线程之间利用 event对象实现事件同步的控制方法。最后还介绍了在不同应用程序之间进行同步事件控制的方法,这种方法使得不同应用程序进行相互间的同步事件控制变得很简单。

关键词:Windows95 线程

同步事件 event

对象 Win32

一, 引言

Windows 95是一个多任务、多线程的操作系统,其中的每一个应用程序都是一个进程(process)。进程可以创建多个并发的线程(thread),同时进程也以主线程(primarythread)的形式被系统调度。所谓的线程是系统调度的一个基本单位, 在程序中线程是以函数的形式出现的,它的代码是进程代码的一部分,并与进程及其派生的其它线程共享进程的全局变量和文件打开表等公用信息。主线程类似于UNIX系统中的父进程,线程则类似于子进程。主线程也是一个线程,称作主线程仅仅是为了和它创建的线程区别开来。每个线程都相对于主线程而独立运行,为了使得线程能对用户的控制作出响应,必须控制线程的运行,比如用户可暂停、终止一个线程的运行或改变线程运行的条件等。而且在用户控制与线程运行之间有时应该有一定的同步控制关系,以保证用户对线程的有效控制。线程可以根据不同的条件对用户的控制作出不同的响应。为了实现上述目的必须使用系统提供的同步对象(Synchronization Object),如event对象。 编写多线程应用程序必须使用Win32 API。

二, 线程的创建方法

调用Win32 API中的CreateThread函数创建线程。hThread=CreateThread(NULL,0,&TEventWindow::ThreadFunc,this,0,&hThreadId);第一个参数设定线程的安全属性,因其仅用于Windows NT,故不设定。第二个参数为0指定线程使用缺省的堆栈大小。第三个参数指定线程函数,线程即从该函数的入口处开始运行,函数返回时就意味着线程终止运行。第四个参数为线程函数的参数,可以是指向任意数据类型的指针。第五个参数设定线程的生成标志。hThreadId存放线程的标识号。线程函数如下定义,上述的 this参数是指向线程所属窗口的句柄指针,通过thrdWin参数传送过来,利用这个指针再调用相应的LoopFunc函数,线程的具体事务都在这个函数中执行。

时间: 2024-12-28 08:01:11

Windows 95多线程间同步事件的控制方法的相关文章

Windows下多线程数据同步互斥的有关知识

 对于操作系统而言,在并行程序设计中难免会遇到数据同步和共享的问题,本文针对这个问题,以windows系统为例回顾一下资源同步的相关问题.要点如下: 1.同步和数据共享  数据征用 2.同步原语     1.互斥和临界区     2.自旋锁     3.信号量     4.读写锁     5.屏障     6.原子操作与无锁代码 3.进程和进程间通信     1.共享内存和映射文件     2.条件变量     3.信号和事件     4.消息队列     5.命名管道     6.sock

windows lua 多线程 线程同步

今天在改一个程序,改成部分逻辑用lua写,这个程序是多线程的.将程序中部分逻辑改成lua之后,各种非法访问内存错误,各种奇奇怪怪的问题,不分时间,不分地点的出现崩溃.从调用堆栈来看,基本都是使用lua造成的.在多线程中使用lua_newthread得到的lus_State仍然有时候程序会崩溃.基本上可以确定为多线程中操作lua 的问题了. 前几天我转载的一篇文章,文章写了关于lua多线程的作法.作法有二 1.每一个线程函数用lua_newthread产生一个新的lua_state 以后对lua操

一个简单的C#多线程间同步的例子

在开发中经常会遇到线程的例子,如果某个后台操作比较费时间,我们就可以启动一个线程去执行那 个费时的操作,同时程序继续执行.在某些情况下可能会出现多个线程的同步协同的问题,下面的例子 就展示了在两个线程之间如何协同工作. 这个程序的思路是共同做一件事情(从一个ArrayList中删除元素),如果执行完成了,两个线程都停 止执行. 代码如下: using System; using System.Collections; using System.Collections.Generic; using

多核时代:并行程序设计探讨(5)——Windows和Linux对决(进程间同步)

Windows和Linux对决(线程间同步) 1.1        Windows线程同步 1.1.1   关键代码区Critical Section 所谓"关键代码区",相信大家看名字也能理解个大概了.首先:它很关键,第二:它是代码区.之所以关键,当然目的就是每次只能一个线程能够进入:既然是代码区,那就是只能在一组拥有同样代码的线程中用. 那什么情况下会用到关键代码区呢?当然是要保护多个线程都会用到的东西了,说到这里,想必你已经猜到了:全局变量和静态变量. 1.1.2   互斥Mut

多线程:C#线程同步lock,Monitor,Mutex,同步事件和等待句柄(下)

转自 http://www.cnblogs.com/freshman0216/archive/2008/08/07/1256919.html    前两篇简单介绍了线程同步lock,Monitor,同步事件EventWaitHandler,互斥体Mutex的基本用法,在此基础上,我们对它们用法进行比较,并给出什么时候需要锁什么时候不需要的几点建议.最后,介绍几个FCL中线程安全的类,集合类的锁定方式等,做为对线程同步系列的完善和补充.       1.几种同步方法的区别       lock和M

MFC多线程中使用事件同步中的事件是什么?

问题描述 MFC多线程中使用事件同步中的事件是什么? MFC多线程中使用事件同步中的事件是什么?和消息处理中的事件有什么异同?同步就是上锁么? 解决方案 用WaitForMultipleObjects WaitForSingleObjects函数 解决方案二: 用事件同步多线程

详细解析C#多线程同步事件及等待句柄_C#教程

最近捣鼓了一下多线程的同步问题,发现其实C#关于多线程同步事件处理还是很灵活,这里主要写一下,自己测试的一些代码,涉及到了AutoResetEvent 和 ManualResetEvent,当然还有也简要提了一下System.Threading.WaitHandle.WaitOne .System.Threading.WaitHandle.WaitAny和System.Threading.WaitHandle.WaitAll ,下面我们一最初学者的角度来看,多线程之间的同步. 假设有这样的一个场

多线程:C#线程同步lock,Monitor,Mutex,同步事件和等待句柄(中)

转自 http://www.cnblogs.com/freshman0216/archive/2008/07/30/1252345.html   本篇继续介绍WaitHandler类及其子类Mutex,ManualResetEvent,AutoResetEvent的用法..NET中线程同步的方式多的让人看了眼花缭乱,究竟该怎么去理解呢?其实,我们抛开.NET环境看线程同步,无非是执行两种操作:一是互斥/加锁,目的是保证临界区代码操作的"原子性":另一种是信号灯操作,目的是保证多个线程按

c# 线程同步: 详解lock,monitor,同步事件和等待句柄以及mutex

转自 http://www.cnblogs.com/xd125/archive/2007/12/12/992406.html 最近由于在准备Collection对象培训的PPT,因为涉及到SyncRoot的属性的讲解,所以对怎样在多线程应用程序中同步资源访问做了个总结:对于引用类型和非线程安全的资源的同步处理,有四种相关处理:lock关键字,监视器(Monitor), 同步事件和等待句柄, mutex类. Lock关键字    本人愚钝,在以前编程中遇到lock的问题总是使用lock(this)