设为首页 加入收藏

TOP

9.2.2 创建/终止线程的技巧
2013-10-07 00:14:02 来源: 作者: 【 】 浏览:61
Tags:9.2.2 创建 终止 线程 技巧

9.2.2  创建/终止线程的技巧

1.问题阐述

线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享所有的进程资源,包括打开的文件、信号标识及动态分配的内存等。一个进程内的所有线程使用同一个地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行及什么时候执行线程,线程有优先级别,优先权较低的线程必须等到优先权较高的线程执行完后再执行。在多处理器的机器上,调度程序可将多个线程放到不同的处理器上去运行,这样可使处理器任务平衡,并提高系统的运行效率。

2.实现技巧

创建用户界面线程有两种方法。第一种方法,首先从CWinTread类派生一个类(注意,必须要用宏DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE对该类进行声明和实现);然后调用函数AfxBeginThread创建CWinThread派生类的对象进行初始化,启动线程运行;第二种方法,先通过构造函数创建类CWinThread的一个对象,然后由程序员调用函数::CreateThread来启动线程。

调用CreateProcess函数创建新的进程,运行指定的程序。

CreateProcess的原型如下:

BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation  );
终止一个线程有两种方法:最常用的方法是调用函数ExitThread()结束线程;另一种方法是调用函数TerminateThread终止线程。在当前线程中的一个线程调用函数ExitProcess就会结束当前线程:
 VOID ExitThread(DWORD dwExitCode);
这个函数用来结束当前线程,其中参数用来存放此线程的退出码,这是最正常的结束线程的方法:
BOOL  TerminateThread(
HANDLE hThread.   // 线程句柄
DWORD dwExitCode   // 线程退出码
);
3.实例代码
 #include <windows.h>
#include <iostream.h>
DWORD WINAPI ThreadFunc(HANDLE Thread)
{
int i;
for(i=0;i<10;i++)
{
cout<<"A new thread has created!"<<endl;
}
return 0;
}
int main(int argc,char* argv[])
{
HANDLE Thread;
DWORD dwThreadId;
Thread=::CreateThread
(NULL,0,ThreadFunc,NULL,0,&dwThreadId);
cout<<"The new thread ID is :"<<dwThreadId<<endl;
::WaitForSingleObject(Thread,INFINITE);
::CloseHandle(Thread);
return 0;
}

4.小结

我们知道,要创建一个线程,必须得有一个主进程,然后由这个主进程来创建一个线程,在一般的VC程序中,主函数所在的进程就是程序的主进程。

【责任编辑:夏书 TEL:(010)68476606】

回书目      

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇9.2.3 工作线程实现的技巧 下一篇9.1.4 终止指定进程的技巧

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: