用VC++5.0实现多线程的调度和处理
2008-11-13 19:33:05 来源:WEB开发网---- 然后,在使用共享资源的函数当中,将同步类与同步访问类的一个锁对象联系起来。即,在访问控制资源的成员函数中应该创建一个CSingleLock 或CMultiLock 的对象并调用该对象的Lock 函数。当访问结束之后,调用UnLock 函数,释放资源。
---- 用这种方式来设计线程安全类比较容易。在保证线程安全的同时,省去了维护同步代码的麻烦,这也正是OOP 的思想。但是使用线程安全类方法编程比不考虑线程安全要复杂,尤其体现在程序调试过程中。而且线程安全编程还会损失一部分效率,比如在单CPU 计算机中多个线程之间的切换会占用一部分资源。
三编程实例
---- 下面以VC++5.0 中一个简单的基于对话框的MFC 例程来说明实现多线程任务调度与处理的方法,下面加以详细解释。
---- 在该例程当中定义两个用户界面线程,一个显示线程(CDisplayThread) 和一个计数线程(CCounterThread)。这两个线程同时操作一个字符串变量m_strNumber,其中显示线程将该字符串在一个列表框中显示,而计数线程则将该字符串中的整数加1。在例程中,可以分别调整进程、计数线程和显示线程的优先级。例程中的同步机制使用CMutex 和CSingleLock 来保证两个线程不能同时访问该字符串。同步机制执行与否将明显影响程序的执行结果。在该例程中允许将将把两个线程暂时挂起,以查看运行结果。例程中还允许查看计数线程的运行。该例程中所处理的问题也是多线程编程中非常具有典型意义的问题。
---- 在该程序执行时主要有三个用于调整优先级的组合框,三个分别用于选择同步机制、显示计数线程运行和挂起线程的复选框以及一个用于显示运行结果的列表框。
---- 在本程序中使用了两个线程类CCounterThread 和CDisplayThread,这两个线程类共同操作定义在CMutexesDlg 中的字符串对象m_strNumber。本程序对同步类CMutex 的使用方法就是按照本文所讲述的融入的方法来实现的。同步访问类CSingleLock 的锁对象则在各线程的具体实现中定义。
更多精彩
赞助商链接