当前位置: 首页 > news >正文

windows下多线程类CThread

忘记在哪位仁兄那里得到了,还没有验证过。备用吧,或许以后还是要自己实现。

其实,编程也就是这样啦。最适合、最放心的往往都是自己实现的。

 

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

class CThread 
{
public:
    CThread();
    virtual DWORD Run();
    bool Start();
    bool Join(DWORD nMillSec = 200);

private:
    static DWORD WINAPI RunThread(LPVOID pParam);
    HANDLE m_hThread;
    LPVOID m_pParam;
    DWORD m_nRet;
    bool m_bStart;
};

CThread::CThread()
{
    m_hThread = NULL;
    m_pParam = NULL;
    m_nRet = 0;
    m_bStart = false;
}

DWORD CThread::Run()
{
    return 0;
}

bool CThread::Start()
{
    m_bStart = true;
    m_hThread = CreateThread(NULL, 0, &RunThread, this, 0, NULL);
    
    if (!m_hThread)
    {
        m_bStart = false;
        return false;
    }
    
    return true;
}

bool CThread::Join(DWORD nMillSec)
{
    while (m_bStart)
        Sleep(nMillSec);

    if (FALSE == GetExitCodeThread(m_hThread, &m_nRet))
        return false;
    else
    {
        CloseHandle(m_hThread);
        return true;
    }
}

DWORD WINAPI CThread::RunThread(LPVOID pParam)
{
    CThread* pThis = (CThread*)pParam;
    DWORD nRet = pThis->Run();
    pThis->m_bStart = false;
    return nRet;
}

class MyThread : public CThread
{
public:
    DWORD Run();
};

DWORD MyThread::Run()
{
    cout << "..." << endl;
    return 0;
}

int main(int argc, char **argv)
{
    MyThread my;
    my.Start();
    my.Join();
    return 0;
}

 

转载于:https://www.cnblogs.com/xuejianhui/articles/3501670.html

相关文章:

  • 监控UITextView和UITextField的键盘确定事件以及字数控制
  • ora01033 oracle正在初始化或关闭
  • 大韩航空如何成为一流航空——等级文化与称呼的改变
  • ScrollView中嵌套ListView的问题
  • excel常用公式
  • 【crunch bang】 增加“菜单项”
  • C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 多系统开发接口 - 苹果客户端开发接口...
  • HttpSolrServer, ConcurrentUpdateSolrServer
  • 反lj邮件的轮回2
  • ant来历
  • Replication--修改复制代理配置来查看代理运行情况
  • 用JAVA API解决几个实际问题
  • 运行WampServer时,提示Exception Exception in module wampmanager.exe at 000F15A0.解决办法
  • Android增量升级的方法和原理
  • oracle引起一些问题
  • [译]CSS 居中(Center)方法大合集
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • idea + plantuml 画流程图
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • laravel5.5 视图共享数据
  • SQLServer之索引简介
  • sublime配置文件
  • 订阅Forge Viewer所有的事件
  • 猴子数据域名防封接口降低小说被封的风险
  • 京东美团研发面经
  • 每天10道Java面试题,跟我走,offer有!
  • 实战|智能家居行业移动应用性能分析
  • 使用 Docker 部署 Spring Boot项目
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 详解移动APP与web APP的区别
  • 新手搭建网站的主要流程
  • #AngularJS#$sce.trustAsResourceUrl
  • $refs 、$nextTic、动态组件、name的使用
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (九)c52学习之旅-定时器
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (译)2019年前端性能优化清单 — 下篇
  • (原)本想说脏话,奈何已放下
  • (转)母版页和相对路径
  • (转)我也是一只IT小小鸟
  • (轉貼) UML中文FAQ (OO) (UML)
  • **PHP分步表单提交思路(分页表单提交)
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET delegate 委托 、 Event 事件
  • .NET Reactor简单使用教程
  • .net反编译的九款神器
  • [autojs]逍遥模拟器和vscode对接
  • [C++]Leetcode17电话号码的字母组合
  • [CSS]中子元素在父元素中居中
  • [C语言]编译和链接
  • [flask] flask的基本介绍、flask快速搭建项目并运行
  • [FxCop.设计规则]8. 也许参数类型应该是基类型
  • [Git 1]基本操作与协同开发