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() = ;
void Start(); private:
HANDLE m_hThread;
DWORD m_dwThreadID;
};
//ThreadBase.cpp

#include "StdAfx.h"
#include "ThreadBase.h" CThreadBase::CThreadBase(void)
{
m_hThread = CreateThread(NULL,,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 ;
}
void CThreadBase::Start()
{
ResumeThread(m_hThread);
}

参考文献:

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

CreateThread用法详解

C++的CreateThread实例的更多相关文章

  1. C++ CreateThread 实例

    //ThreadBase.h#pragma once #include<windows.h> class CThreadBase { public: CThreadBase(void); ...

  2. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  3. CreateThread()使用实例

    1.定义的全局变量 DWORD WINAPI ClientThread(LPVOID lpParam); struct ClientInfo {   SOCKET sock;   SOCKADDR_I ...

  4. C++多线程编程(入门实例)

    多线程在编程中有相当重要的地位,我们在实际开发时或者找工作面试时总能遇到多线程的问题,对多线程的理解程度从一个侧面反映了程序员的编程水平. 其实C++语言本身并没有提供多线程机制(当然目前C++ 11 ...

  5. C++多线程编程入门之经典实例

    多线程在编程中有相当重要的地位,我们在实际开发时或者找工作面试时总能遇到多线程的问题,对多线程的理解程度从一个侧面反映了程序员的编程水平. 其实C++语言本身并没有提供多线程机制,但Windows系统 ...

  6. 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别

    本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...

  7. CreateThread和_BeginThread的区别

    1.程序: 程序构成: (1)源代码 (2)可执行的二进制代码 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念.由操作系统加载其可执行的二进制代码,分配相应的数据结构:进程控制 ...

  8. CreateThread函数&&CString::GetBuffer函数

    对这个两个常见的windows下的函数学习了一下: //最简单的创建多线程实例 #include <stdio.h> #include <windows.h> //子线程函数 ...

  9. CreateThread函数&amp;&amp;CString::GetBuffer函数

    对这个两个常见的windows下的函数学习了一下: //最简单的创建多线程实例 #include <stdio.h> #include <windows.h> //子线程函数 ...

随机推荐

  1. iOS Block(一)

    Block使用总结: 1.格式: ReturnType (^ BlockName)(参数…); //例: int (^ BFunc) (int a, int b); 2.block赋值: block名 ...

  2. 多线程之NSOperation和NSOperationQueue

    这篇文章里我将不过多的谈及理论知识,这些东西会的自然会,不会的,看多了也是云里雾里.下面我讲更多的用代码+注释的方式来讲如何使用NSOperation和NSOperationQueue. 1.NSOp ...

  3. 嵌入式调试器原理和各类调试器集锦(JLINK、STLINK、CCDEBUG)

    工欲善其事,必先善其器.调试器在嵌入式开发调试中的重要性不言而喻,单步.断点和监察的效率远高于串口打印.但是,调试器对于一般开发人员往往是一个黑匣子.今天我们就来谈谈调试器的原理,顺便把自己的几类调试 ...

  4. C++语言-03-类与对象

    类 类是面向对象编程中的核心概念,用于定义一个数据类型的蓝图,描述类的对象包括什么,以及可以在这些对象上执行那些操作. 类的成员 数据成员 描述数据的表示方法 class ClassName { ac ...

  5. animation of android (3)

    视图动画,只有view可以使用. 在android3.0以后,属性动画. ValueAnimation 可以记录属性变化的过程,所以他的对象是任何object. 所以ValueAnimation 的真 ...

  6. 高点击率的Banner设计14招

    英文原文:14 design tips for more clickable banner ads 译文:http://www.uisdc.com/banner-click-rate 虽然互联网发展迅 ...

  7. 利用JS实现手机访问PC网址自动跳转到wap网站

    方法一:使用百度siteapp中的js进行判断 <script src="http://siteapp.baidu.com/static/webappservice/uaredirec ...

  8. Effective Java 61 Throw exceptions appropriate to the abstraction

    Exception translation: higher layers should catch lower-level exceptions and, in their place, throw ...

  9. 关于Redis持久化

    Redis有两种持久化的方式:快照(RDB文件)和追加式文件(AOF文件) RDB持久化方式是在一个特定的间隔保存某个时间点的一个数据快照. AOF(Append only file)持久化方式则会记 ...

  10. spinner下拉列表

    xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:l ...