码迷,mamicode.com
首页 > 编程语言 > 详细

C++的CreateThread实例

时间:2016-06-15 23:47:48      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:

 

  function CreateThread(
  lpThreadAttributes: Pointer;           {安全设置}
  dwStackSize: DWORD;                    {堆栈大小}
  lpStartAddress: TFNThreadStartRoutine; {入口函数}
  lpParameter: Pointer;                  {函数参数}
  dwCreationFlags: DWORD;                {启动选项}
  var lpThreadId: DWORD                  {输出线程 ID }
): THandle; stdcall;                     {返回线程句柄}

1、返回值:返回线程句柄
"句柄" 类似指针, 但通过指针可读写对象, 通过句柄只是使用对象;
有句柄的对象一般都是系统级别的对象(或叫内核对象); 之所以给我们的是句柄而不是指针, 目的只有一个: "安全";
貌似通过句柄能做很多事情, 但一般把句柄提交到某个函数(一般是系统函数)后, 我们也就到此为止很难了解更多了; 事实上是系统并不相信我们.

不管是指针还是句柄, 都不过是内存中的一小块数据(一般用结构描述), 微软并没有公开句柄的结构细节, 猜一下它应该包括: 真实的指针地址、访问权限设置、引用计数等等.

既然 CreateThread 可以返回一个句柄, 说明线程属于 "内核对象".
实际上不管线程属于哪个进程, 它们在系统的怀抱中是平等的; 在优先级(后面详谈)相同的情况下, 系统会在相同的时间间隔内来运行一下每个线程, 不过这个间隔很小很小, 以至于让我们误以为程序是在不间断地运行.

 

//ThreadBase.h<br>#pragma once
#include<windows.h>
class CThreadBase
{
public:
    CThreadBase(void);
    ~CThreadBase(void);
    static DWORD WINAPI ThreadProc (PVOID pParam);
    virtual void Run() = 0;
    void Start();
 
private:
    HANDLE m_hThread;
    DWORD  m_dwThreadID;
};

 

//ThreadBase.cpp
 
#include "StdAfx.h"
#include "ThreadBase.h"
 
CThreadBase::CThreadBase(void)
{
    m_hThread = CreateThread(NULL,0,ThreadProc,this,CREATE_SUSPENDED,&m_dwThreadID);
}
 
CThreadBase::~CThreadBase(void)
{
    CloseHandle(m_hThread);
}
DWORD WINAPI CThreadBase::ThreadProc (PVOID pParam)
{
 
    if (NULL!=pParam)
    {
        ((CThreadBase*)pParam)->Run();
    }
    return 0;
}
void CThreadBase::Start()
{
    ResumeThread(m_hThread);
}

 参考文献:

采用CreateThread()创建多线程程序

CreateThread用法详解

C++的CreateThread实例

标签:

原文地址:http://www.cnblogs.com/rainbow70626/p/5589396.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!