进程与线程的区别,及用户界面线程和工作者线程的创建x线程类

进程:是由两个部分组成,分别是进程的内核对象和地址空间。

线程: 也是由两个部分组成,分别是线程的内核对象和线程堆栈。

           进程从来不执行任务,他只是线程的容器。线程总是在进程中创建的,所以线程的寿命期是在该进程中生存的,而且线程是在进程的地址空间中执行的代码,并且在进程的地址空间中对数据进行操作,因此在同一个进程环境中,多个线程可以共享单个地址空间和内核对象句柄,执行相同的代码,对相同的数据进行操作。同时,进程与线程相比,占用的资源更多,因为进程需要更多的地址空间。而且.exe,dll 文件要加载到一个地址空间,所以又要文件资源。

操作系统用线程内核对象来对线程实施管理,同时用来存放线程池统计信息的对方。而堆栈,用来维护线程在执行代码时需要的所有函数参数和局部变量。

线程函数(必须要有返回值),可以执行任何任务。最终,当线程函数到达他的结尾处并且返回,这时,线程终止运行。同时该线程的堆栈的内存被释放,同时县城的内核使用的计数减一当一个线程被创建时,它的使用计数为 2,同时,使用 closehandle() 会使计数减一。如果使用计数为 0 时,线程的内核对象就会被撤销。与进程对象相同,线程的内核对象的寿命至少可以达到与它相关连的线程那样长。不过,该对象的寿命可以远远的超过线程本身的寿命。

       一般主线程创建的时间?

线程用于描述进程中的运行路径,。每个当进程被初始化时,系统就要为其创建一个主线程。

        工作线程与用户界面线程区别及创建方法?

 1、工作者线程倾向于琐碎的处理,与它不同的是,用户界面线程具有自己的界面和消息循环而且实际上类似于运行其他应用程序。创建线程而不是其他应用程序的好处是线程可与应用程序共享程序空间,这样可以简化线程与应用程序共享数据的功能。

2、典型情况不希望占用主应用程序大量处理时间但是需要一个界面的功能或服务,或者用户也可完全不考虑界面,将这种类型的线程用于窗口消息服务器作为一种传递其消息的方式,以避免使自己因占用处理时间过多而陷入困境。 

2种线程的创建步骤:

工作者线程:
首先创建一个函数UNIT ThreadProc(LPVOID pParam);可以把这个函数看成一个线程,进行需要的操作。调用

AfxBeginThread(ThreadProc,//ThreadProc控制函数地址
                                                   &m_Control,//要显示的区域,控件对象地址,比如EDITBOX LISTBOX 
                                                   0,0,0,NULL)创建线程。

用户界面进程:
这里以建立好的对话框MFC程序为例,首先需要从CWinThread类派生一个新的线程类,就叫它CMyThread(
线程类吧,这个类下需要有窗体成员class CMyFrameWnd (: public CFrameWnd)用于在窗体上显示,要不然怎么叫界面进程呢?还需要重载CMyThread中的虚函数 virtual BOOL InitInstance()和virtual int ExitInstance(); 在BOOL InitInstance()中,要将 m_pMainWnd=new CMyFrameWnd;之后要创建出窗口
if(!((CMyFrameWnd*)m_pMainWnd)->Create(NULL,L"CMyFrameWnd"))
{
AfxMessageBox(L" fail create windows");
}

virtual int ExitInstance()中

int CMyThread::ExitInstance()

{
// TODO: 在此执行任意逐线程清理
if(m_pMainWnd)
{
delete m_pMainWnd;
}
return CWinThread::ExitInstance();
}

对于窗口消息可以在 CMyFrameWnd中添加消息响应代码

在主程序创建该线程 CMyThread* pThread (返回的是线程句柄)= 

(CMyThread*)AfxBeginThread(RUNTIME_CLASS(CMyThread),THR EAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL),

pthread=AfxBeginThread(RUNTIME_CLASS(CMyThread));
pThread->SetOwner(this)//设置窗口指针 
pThread->ResumeThread();//恢复线程



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值