用VC++5.0实现多线程的调度和处理
2008-11-13 19:33:05 来源:WEB开发网创建用户界面线程有两种方法。
---- 第一种方法,首先从CWinTread 类派生一个类(注意必须要用宏DECLARE_DYNCREATE 和IMPLEMENT_DYNCREATE 对该类进行声明和实现);然后调用函数AfxBeginThread 创建CWinThread 派生类的对象进行初始化启动线程运行。除了调用函数AfxBeginThread 之外, 也可以采用第二种方法,即先通过构造函数创建类CWinThread 的一个对象,然后由程序员调用函数::CreateThread 来启动线程。通常类CWinThread 的对象在该线程的生存期结束时将自动终止,如果程序员希望自己来控制,则需要将m_bAutoDelete 设为FALSE。这样在线程终止之后类CWinThread 对象仍然存在,只是在这种情况下需要手动删除CWinThread 对象。
---- 通常线程函数结束之后,线程将自行终止。类CwinThread 将为我们完成结束线程的工作。如果在线程的执行过程中程序员希望强行终止线程的话,则需要在线程内部调用AfxEndThread(nExitCode)。其参数为线程结束码。这样将终止线程的运行,并释放线程所占用的资源。如果从另一个线程来终止该线程,则必须在两个线程之间设置通信方法。如果从线程外部来终止线程的话,还可以使用Win32 函数(CWinThread 类不提供该成员函数):BOOL TerminateThread(HANDLE hThread,DWORD dwExitcode)。但在实际程序设计中对该函数的使用一定要谨慎,因为一旦该命令发出,将立即终止该线程,并不释放线程所占用的资源,这样可能会引起系统不稳定。
---- 如果所终止的线程是进程内的最后一个线程,则在该线程终止之后进程也相应终止。
---- 3 进程和线程的优先级问题
---- 在Windows95 和WindowsNT 操作系统当中,任务是有优先级的,共有32 级,从0 到31,系统按照不同的优先级调度线程的运行。
更多精彩
赞助商链接