C++类中创建线程
经常会遇到需要在类中创建线程,可以使用静态成员函数,并且将类实例的指针传入线程函数的方式来实现。
实现代码代码如下:
/* 类头文件 CTestThread.h */
#include<iostream>
#include<process.h>
#include<Windows.h>
class TestThread
{
public:
TestThread();
~TestThread();
int StartThread(); // 开线程
int SetStopFlag(bool flag); //停止线程
private:
static unsigned int WINAPI ThreadFunc(LPVOID lpParam); //线程函数
private:
bool m_bStopFlag;
};
/* 类源文件 CTestThread.cpp */
#include "CTestThread.h"
TestThread::TestThread()
{
m_bStopFlag = false;
}
TestThread::~TestThread()
{
m_bStopFlag = true;
}
int TestThread::StartThread()
{
HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &ThreadFunc, (LPVOID)this, 0, NULL);
return 0;
}
int TestThread::SetStopFlag(bool flag)
{
m_bStopFlag = flag;
return 0;
}
unsigned int WINAPI TestThread::ThreadFunc(LPVOID lpParam)
{
TestThread* pthis = (TestThread*)lpParam;
while (!pthis->m_bStopFlag)
{
printf("ThreadFunc is running cassid is %d .\n",pthis->m_classid);
Sleep(1000);
}
printf("ThreadFunc return.\n");
return 0;
}
/* 测试代码 test.cpp */
#include "CTestThread.h"
int main()
{
TestThread testThread(1);
testThread.StartThread();
char ch;
while (ch = getchar())
{
if (ch == 'q' || ch == 'Q')
{
testThread.SetStopFlag(true);
break;
}
Sleep(1000);
}
}
C++类中创建线程的更多相关文章
- C++:类中创建线程
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <iostream&g ...
- JAVA中创建线程的三种方法及比较
JAVA中创建线程的方式有三种,各有优缺点,具体如下: 一.继承Thread类来创建线程 1.创建一个任务类,继承Thread线程类,因为Thread类已经实现了Runnable接口,然后重写run( ...
- Java中创建线程的三种方式以及区别
在java中如果要创建线程的话,一般有3种方法: 继承Thread类: 实现Runnable接口: 使用Callable和Future创建线程. 1. 继承Thread类 继承Thread类的话,必须 ...
- python 多线程编程之threading模块(Thread类)创建线程的三种方法
摘录 python核心编程 上节介绍的thread模块,是不支持守护线程的.当主线程退出的时候,所有的子线程都将终止,不管他们是否仍在工作. 本节开始,我们开始介绍python的另外多线程模块thre ...
- java 中创建线程有哪几种方式?
Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行 ...
- JAVA中创建线程池的五种方法及比较
之前写过JAVA中创建线程的三种方法及比较.这次来说说线程池. JAVA中创建线程池主要有两类方法,一类是通过Executors工厂类提供的方法,该类提供了4种不同的线程池可供使用.另一类是通过Thr ...
- 在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程!(更好的管理异常)
在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程! 如果直接使用Win32的API函数CreateThread()创建多个线程,也是可以创建的.但 ...
- 【java并发】传统线程技术中创建线程的两种方式
传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...
- java中创建线程的几种方法及区别
1,实现Runnable接口创建线程 特点: A:将代码和数据分开,形成清晰的模型 B:线程体run()方法所在的类可以从其它类中继承一些有用的属性和方法 C:有利于保持程序风格的一致性 2,继承Th ...
随机推荐
- Consider defining a bean of type 'com.*.*.mapper.*.*Mapper' in your configuration.
@Mapper 不能加载的问题 Consider defining a bean of type 'com.*.*.mapper.*.*Mapper' in your configuration. 添 ...
- FineReport简单上手
一.简介 FineReport是一个企业级报表制作.分析和展示工具 官网可以下载个人版进行体验学习:(windows版本设计器) https://www.finereport.com/product/ ...
- 2019 GDD breaking world‘s record of π
Day 2 1.breaking pi‘s world record with google cloud [concept] memory wall: Originally theorized in ...
- nginx安装和命令
1. nginx安装 1.1 mac上安装 brew search nginx brew install nginx 1.2 windows上安装 下载nginx.zip,解压到D盘,发送快捷方式到桌 ...
- Ubuntu 安装docker CE以及harbor
Docker CE安装 系统建议版本:Ubuntu 16.04 官方安装文档连接:https://docs.docker.com/install/linux/docker-ce/ubuntu/#pre ...
- Intellij IDEA 启动出现“前言中不允许有内容”
修改错误方法,在IDEA的workspace中找到 .idea 目录下的workspace.xml文件删除即可.
- Emiya 家今天的饭
\(dp_{i,j,k}\)表示前\(i\)种烹饪方法,假设最多的是食材\(j\),食材\(j\)比其他食材多\(k\)次出现 其中\(i \in [1,n],j \in [1,m],k \in [- ...
- oracle python操作 增删改查
oracle删除 删除表内容 truncate table new_userinfo; 删除表 drop table new_userinfo; 1.首先,python链接oracle数据库需要配置好 ...
- vim设定Tab缩进长度
在Linux系统中,vim是一款非常好用的文本编辑器,那么,如何在Linux下的vim编辑器设定Tab的缩进长度呢? Linux系统下,vim编辑器Tab键的默认长度为8个空格,在vim中可以通过修改 ...
- MYSQL --Subquery returns more than 1 row查询结果多于一行
Subquery returns more than 1 row表示子查询返回了多行数据 例如: select * from table1 where table1.colums=(select co ...