zoukankan      html  css  js  c++  java
  • C++的CreateThread实例

      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用法详解

  • 相关阅读:
    资源加载相关
    Ubuntu 使用root登陆帐户
    安装zookeeper时,启动成功,可是状态查询未成功
    使用WinSCP远程连接虚拟机
    分布式服务管理框架-Zookeeper客户端zkCli.sh使用详解
    js怎么监听一类标签的点击事件
    js获取select标签选中的值
    学习
    druid
    Linux上非root用户jdk环境变量配置
  • 原文地址:https://www.cnblogs.com/rainbow70626/p/5589396.html
Copyright © 2011-2022 走看看