文档章节

jthread 介绍

mjrao
 mjrao
发布于 2016/04/19 13:55
字数 708
阅读 45
收藏 0
点赞 1
评论 0

JThread

介绍

在许多项目中,我们会经常使用到线程.为了在unix和windows平台下使用一样的代码,我决定在这些平台上将已经存在的线程函数封装成一个简单的类.

JThread 包非常的简单:目前,它只包含三个类:分别是JThread, JMutex和JMutexAutoLock,从它们的名称上可以想到:JThread表示一个线程,JMutex表示一个互斥体,线程类仅仅包含很基本的函数,例如:开始或结束一个线程.

使用

下面是JThread,JMutex和JMutexAutoLock类的描述.注意函数的返回类型int总是返回0及大于0的值表示成功,负值表示出现了问题.

JMutex

下面是JMutex类的定义.在你使用这种类型的实例之前,你必须首先调用init函数.你可以通过IsInitialized的返回值检测互斥体是否已经初始化.初始化之后,通过调用Lock和Unlock函数可以使互斥体锁定和解锁.

class JMutex
{
public :
	JMutex();
	~JMutex() ;
	int Init();
	int Lock();
	int UnLock();
	bool IsInitialized();
};

JMutexAutoLock

下面是JMutexAutoLock类的定义.它的目的是更容易的实现线程安全函数,不用担心什么时候位互斥体解锁.

class JMutexAutoLock
{
public:
	JMutexAutoLock(JMutex &m);
	~JMutexAutoLock();
};

下面的代码演示了这个类的使用:

void MyClass::MyFunction()
{
	JMutexAutoLock autoLock(m_myMutex);
    // 在这做互斥保护
}

当autoLock变量被创建时,它自动锁定互斥体m_myMutex在构造函数中.autoLock变量的析构函数确保lock被释放.

JThread

为了创建你自己的线程,你不得不从JThread继承一个类,下面是描述.在你的继承类里,你必须实现一个Thread成员函数,这将要在新的线程里执行.在你的自己的线程实线中应当调用ThreadStarted.

为了启动你的线程,你只要简单的调用Start函数.你需要在你自己的Thread函数中调用ThreadStarted.这样,当你的Start函数完成滞后,你才能确保你的Thread能真正的立即运行起来.

你可以通过调用IsRunning函数来检测你的线程是否正在运行.如果线程已经完成,通过调用GetReturnValue检测到返回值,最后通过Kill函数结束它.

你要小心的使用Kill函数:当调用kill时,一个互斥体正在工作(例如一个网络互斥体),这个互斥体可能在锁状态,这将导致其他线程阻塞.当你确保线程在一个循环中不能被结束的时候,才可以使用Kill函数

class JThread
{
public:
	JThread();
	virtual ~JThread();
	int Start();
	int Kill();
	virtual void * Thread() = 0;
	bool IsRunning();
	void * GetReturnValue();
protected:
	void ThreadStarted();
};

原文文档,翻译出入的地方,欢迎提交pull request或 mjrao@foxmail.com 联系我!

© 著作权归作者所有

共有 人打赏支持
mjrao
粉丝 82
博文 152
码字总数 71971
作品 0
朝阳
后端工程师
jrtplib 怎样在mingw上的编译安装

各位好,我在安装jrtplib时 碰到一个这样的问题,找了很久也没有解决,希望路过有人能看一下帮小菜解决一下问题。 编译环境:codeblocks+mingw(13.12+4.7.1) cmake:2.8版 ; jrtplib 3.9....

SLonger
2015/12/08
181
0
JVMTI 之 HelloWorld

看了一些关于JVMTI的资料,对JVMTI的工作原理有了一个基本的了解,从SUN给出的文档来看,JVMTI将是JVMPI和JVMDI等技术的替代品,并且建议用户使用JVMTI,而不是JVMPI或JVMDI,因为在以后的J...

红薯
2010/06/17
1K
2
jrtplib的文档翻译

1 从RTPSession类开始 所有的类和函数都是jrtplib名字空间的一部分,为了简化代码,我们声明我们使用的是如下的名字空间: using namespace jrtplib; 为了使用RTP,首先要创建一个RTPSession对象...

zhangyujsj
2016/03/01
71
0
Java的LockSupport.park()实现分析

LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语。LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数: [java] view plaincopy public n...

宁宁爸
2015/01/29
0
0
第一次尝试 JVMTI

JVMTI是JDK1.5众多最新特性的一项,通过JVMTI我们可以做到许多以前难以做 到的事情.很多时候,最近我对程序建立了多少个对 象以及每个对象的大小很感兴 趣.看了一些资料,知道可以通过代码注入...

红薯
2010/06/17
1K
3
Java线程那点事儿

引言 说到Thread大家都很熟悉,我们平常写并发代码的时候都会接触到,那么我们来看看下面这段代码是如何初始化以及执行的呢? publicclassThreadDemo{publicstaticvoidmain(String[]args) {n...

JAVA大神
2017/12/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多
流利阅读笔记29-20180718待学习

高等教育未来成谜,前景到底在哪里? Ray 2018-07-18 1.今日导读 在这个信息爆炸的年代,获取知识是一件越来越容易的事情。人们曾经认为,如此的时代进步会给高等教育带来众多便利。但事实的...

aibinxiao
11分钟前
6
0
第15章FTP服务搭建与配置

15.1FTP介绍 FTP多用于Windows传文件到linux rz sz在文件超过4G,就无法使用了——>安装包yum install -y install lrzsz rz把 window 上的文件传输到 linux 上 sz 把 linux 上的文件传输到 ...

Linux学习笔记
19分钟前
0
0
OSChina 周三乱弹 —— 你被我从 osc 老婆们名单中踢出了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小鱼丁:分享五月天的单曲《后来的我们 (电影《后来的我们》片名曲)》: 《后来的我们 (电影《后来的我们》片名曲)》- 五月天 手机党少年们想...

小小编辑
24分钟前
6
1
Spring Boot Admin 2.0开箱体验

概述 在我之前的 《Spring Boot应用监控实战》 一文中,讲述了如何利用 Spring Boot Admin 1.5.X 版本来可视化地监控 Spring Boot 应用。说时迟,那时快,现在 Spring Boot Admin 都更新到 ...

CodeSheep
43分钟前
0
0
Python + Selenium + Chrome 使用代理 auth 的用户名密码授权

米扑代理,全球领导的代理品牌,专注代理行业近十年,提供开放、私密、独享代理,并可免费试用 米扑代理官网:https://proxy.mimvp.com 本文示例,是结合米扑代理的私密、独享、开放代理,专...

sunboy2050
今天
0
0
实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
1
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部