用VC++5.0实现多线程的调度和处理
2008-11-13 19:33:05 来源:WEB开发网---- 2 辅助线程和用户界面线程的创建和终止
---- 要创建一个线程,需要调用函数AfxBeginThread。该函数通过参数重载具有两种版本,分别对应辅助线程和用户界面线程。无论是辅助线程还是用户界面线程,都需要指定额外的参数以修改优先级,堆栈大小,创建标志和安全特性等。函数AfxBeginThread 返回指向CWinThread 类对象的指针。
---- 创建助手线程相对简单。只需要两步:实现控制函数和启动线程。它并不必须从CWinThread 派生一个类。简要说明如下:
---- 1. 实现控制函数。控制函数定义该线程。当进入该函数,线程启动;退出时,线程终止。该控制函数声明如下:
UINT MyControllingFunction( LPVOID pParam );
---- 该参数是一个单精度32 位值。该参数接收的值将在线程对象创建时传递给构造函数。控制函数将用某种方式解释该值。可以是数量值,或是指向包括多个参数的结构的指针,甚至可以被忽略。如果该参数是指结构,则不仅可以将数据从调用函数传给线程,也可以从线程回传给调用函数。如果使用这样的结构回传数据,当结果准备好的时候,线程要通知调用函数。当函数结束时,应返回一个UINT 类型的值值,指明结束的原因。通常,返回0 表明成功,其它值分别代表不同的错误。
---- 2. 启动线程。由函数AfxBeginThread 创建并初始化一个CWinThread 类的对象,启动并返回该线程的地址。则线程进入运行状态。
---- 3. 举例说明。下面用简单的代码说明怎样定义一个控制函数以及如何在程序的其它部分使用。
UINT MyThreadProc( LPVOID pParam )
{
CMyObject* pObject = (CMyObject*)pParam;
if (pObject == NULL ||
!pObject- >IsKindOf(RUNTIME_CLASS(CMyObject)))
return -1; //非法参数
……//具体实现内容
return 0; //线程成功结束
}
//在程序中调用线程的函数
……
pNewObject = new CMyObject;
AfxBeginThread(MyThreadProc, pNewObject);
……
更多精彩
赞助商链接