Linux下C编程2--线程的练习

摘要:
对于多线程演示,我们尝试封装线程类以简化创建多线程的步骤。主要参考文章是:跳转到1个线程基类BaseThread:主要提供接口自己的函数thread类MyThread:在线程#ifndefCTHREAD_HH#defineCTHREAD_HH#include#include#include ClassBaseThread{public:BaseThread();virtual~BaseThread(;//开始创建线程并执行bootstart();//阻止线程退出bootwait();//thread entry函数使用静态全局staticoid*ThreadEntry;//线程要执行的实际任务放在此处。=p){p-˃Run();}否则{printf;}returnNULL;}voidMyThread::Run(){用于{printf;}return;}调用#include“CThread.h”intmain(){MyThreadtest;test.start();test.wait();return0;}在主程序中

先挖坑,周末再补==

对于多线程的demo,主要在尝试封装 thread类来简化创建多线程的步骤:

主要参考文章:跳转1

线程基类  BaseThread:主要提供接口

自己的功能线程类  MyThread: 主要去实现你的线程中希望执行的操作

#ifndef CTHREAD_HH
#define CTHREAD_HH

#include <stdio.h>
#include <iostream>
#include <pthread.h>
class BaseThread
{
public:
	
	BaseThread();
	virtual ~BaseThread();

	//开始创建线程并执行
	bool start();

	//阻塞直到等待线程退出
	bool wait();	

	//线程入口函数,用静态全局
	static void* ThreadEntranc(void* args);
	
	//线程的真正要执行任务放在这里。ThreadEntranc中调用这个函数
	virtual void Run()=0;
	

private:
	
	pthread_t m_threadID;

};


class MyThread:public BaseThread
{
public:

	//继承之后只需要重写这个线程内部执行动作函数	
	virtual void Run();
	
};


#endif

  

来看对应的实现

#include "CThread.h"

BaseThread::BaseThread()
{

}

BaseThread::~BaseThread()
{
	printf("~BaseThread()
");
}

bool BaseThread::start()
{
	int iRet = -1;
	iRet = pthread_create(&m_threadID, NULL, ThreadEntranc, this);
	if(0 != iRet)
	{
		printf("pthread_create error,iRet: %d
",iRet);
		return false;
	}
	return true;		
}

bool BaseThread::wait()
{
	int iRet = -1;
	iRet = 	pthread_join(m_threadID,NULL);
	if(0 != iRet)
	{
		printf("pthread_join error,iRet: %d
",iRet);
		return false;
	}
	printf("pthread_join over
");
	return true;	
}

void* BaseThread::ThreadEntranc(void* args)
{
	BaseThread* p = NULL;
	p = static_cast<BaseThread*>(args);
	if(NULL != p)
	{
		p->Run();
	}
	else
	{
		printf("获取线程实例指针失败
");
	}
	return NULL;
}



void MyThread::Run()
{
	for(int i=0; i<5; i++)
	{
		printf("--- this mythred--
");
	}
	return ;
}

  

主程序中的调用

#include "CThread.h"

int main()
{
	MyThread test;
	test.start();
	test.wait();
	return 0;
}

  

免责声明:文章转载自《Linux下C编程2--线程的练习》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇二、vue响应式对象Linux中的vim常见操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Neety的基础使用及说明

BIO(缺乏弹性伸缩能力,并发量小,容易出现内存溢出,出现宕机每一个客户端对应一个线程 伪异步IO:创建线程池,由线程池里边的线程负责连接处理,M个个请求进来时,会在线程池创建N个线程。容易出现线程池阻塞。由一个线程池来处理客户端的请求。 NIO:异步非阻塞,服务器实现模式为一个请求一个线程,客户端发送的连接请求都会注册到多路复用器上,多路...

HBase之七:事务和并发控制机制原理

作为一款优秀的非内存数据库,HBase和传统数据库一样提供了事务的概念,只是HBase的事务是行级事务,可以保证行级数据的原子性、一致性、隔离性以及持久性,即通常所说的ACID特性。为了实现事务特性,HBase采用了各种并发控制策略,包括各种锁机制、MVCC机制等。本文首先介绍HBase的两种基于锁实现的同步机制,再分别详细介绍行锁的实现以及各种读写锁的应...

C#线程学习笔记六:线程同步--信号量和互斥体

    本笔记摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/23/Mutex_And_Semaphore.html,记录一下学习过程以备后续查用。     一、信号量(Semaphore)     信号量(Semaphore)是由内核对象维护的int变量。当信号量为0时,在信号量上等待的线程会堵塞;信号...

mysql主从复制延迟问题的相关知识与解决方案

一、如何监控发生了主从延迟? 在从库机器上,执行show slave status,查看Seconds_Behind_Master值,代表主从同步从库落后主库的时间,单位为秒,若同从同步无延迟,这个值为0。 Mysql主从延迟一个重要的原因之一是:mysql是以单线程串行执行。 主从复制数据时,在从服务器上的mysql,是一个线程在同步数据。 串行的方式,...

C# Thread线程介绍

一、基本概念 1、进程 首先打开任务管理器,查看当前运行的进程: 从任务管理器里面可以看到当前所有正在运行的进程。那么究竟什么是进程呢? 进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元,在进程...

iOS-消息循环RunLoop详解

RunLoop,跑圈。在iOS开发中,也就是运行循环。 在应用需要的时候自己跑起来运行,在用户没有操作的时候就停下来休息。充分节省CPU资源,提高程序性能。 二. RunLoop的概念与作用 概念:一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。但是有时候我们需要线程能够一直“待命”随时处理事件而不退出,这就需要一个机制来完成这样的...