线程,同步
来源:互联网 发布:迅捷数据恢复注册码 编辑:程序博客网 时间:2024/05/24 01:13
1. MFC应用程序中的线程有两种类型:用户界面线程(User Interface Thread)和工作者线程(Worker Thread)两大类。
用户界面线程可以产生自己的窗口并负责处理相关的窗口消息,拥有单独的消息队列,能够对事件和用户输入做出响应。
工作者线程适用于处理后台任务,而不影响用户对应用程序的使用。工作者线程仅仅由一个函数体实现,其实现简单,便于编程者控制,适用于一些费时的后台任务处理。
2.在多线程应用程序中,两个或更多的线程同时访问同一数据会导致不可预知的结果,因此保持线程间的同步是一个不可或缺的环节。使隶属于同一进程的各线程协调一致的工作称为线程的同步。
MFC提供了四种同步方法:临界区(Critical Section)、信号灯(Semapore)、互斥量(Mutex)和事件(Event)[6]。
互斥对象和事件对象属于内核对象,利用内核对象进行线程同步时,速度较慢,但可以在多个进程中的各个线程间进行同步。
关键代码段工作在用户方式下,同步速度快,但易进入死锁状态,因为在等待进入时不能设置超时值。
通常,在编写多线程程序并需要实现同步时,首选的是使用关键代码段,它的使用比较简单。
3.临界区,即关键代码段 CRITICAL_SECTION
CRITICAL_SECTION是不能够“锁定”资源的,它能够完成的功能是同步不同线程的代码段。
当一个线程执行了EnterCritialSection之后,cs(CRITICAL_SECTION)里面的信息便被修改了,以指明哪一个线程占用了它,此时并没有任何资源被“锁定”。不管什么资源,其它线程都还是可以访问的(当然,执行的结果可能是错误的)。只不过,在这个线程尚未执行LeaveCriticalSection之前,其它线程碰到EnterCritialSection语句的话,就会处于等待状态,相当于线程被挂起了。 这种情况下,就起到了保护共享资源的作用。
也正由于CRITICAL_SECTION是这样发挥作用的,所以必须把每一个线程中访问共享资源的语句都放在EnterCritialSection 和 LeaveCriticalSection之间。
4.事件
事件是通过将自身设置为有信号或无信号来通知其它线程,与线程相配合能对消息做出较快反应,适合于工控程序。
5.互斥量
互斥量适合用来协调多个线程对共享资源的同步访问。
6.创建线程
CreateThread()是Windows的API函数,线程优先级需由另一个函数确定。AfxBeginThread()由MFC提供,有很多低级控制已经封装。
CreatThread返回一个句柄,如果不需要使用句柄操控线程,可以CloseHandle(hTread),Windows才会释放资源。CloseHandle后线程仍然会正常执行,只是不能操控它了。
CreateThread:是Windows的API函数,直截了当的创建了线程。 它没有考虑:(1)C Runtime中需要对多线程进行纪录和初始化,以保证C函数库工作正常(典型的例子是strtok函数)。(2)MFC也需要知道新线程的创建,也需要做一些初始化工作(当然,如果没用MFC就没事了)。
_beginthreadex:MS对C Runtime库的扩展函数,首先针对C Runtime库做了一些初始化的工作,以保证C Runtime库工作正常。然后,调用CreateThread真正创建线程。
AfxBeginThread:MFC中线程创建的函数,首先创建了相应的CWinThread对象,然后调用CWinThread::CreateThread, 在CWinThread::CreateThread中,完成了对线程对象的初始化工作,然后,调用_beginthreadex创建线程。
实际上,这三个函数之间存在一定的调用关系,第一个纯粹一些,后两个完成自己相应的工作之后,调用前者实现线程的创建
m_pCheckThread = (CCheckThread*) AfxBeginThread(RUNTIME_CLASS(Ccheck Thread), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
将对话框指针传给监控线程
m_pCheckThread->SetOwner(this);
- 线程同步--线程同步--线程同步--线程同步--线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- WordPress初级教程-24: Wordpress 快捷键操作
- JSON 入门指南
- PHP函数:header()
- WordPress初级教程-25: 如何获取Wordpress.com API Key
- WordPress初级教程-26: 选择Wordpress创建博客的10个理由
- 线程,同步
- WordPress初级教程-27: Wordpress的表情图标字符
- Asia - Seoul - 2007/2008 UVA 3902 Network
- WordPress初级教程-28: 基于Wordpress的免费博客服务商
- PHP函数:setcookie()
- 李开复:算法的力量
- Ubuntu9.04 安装Eclipse3.6.1
- Servlet 文件上传 : 解析request的InputStream流
- JBoss4.2.3部署SSH2