C++ 实现类似Qt和Java的线程用法
2017-12-21 00:08
489 查看
封装线程
在使用Qt和Java的时候 使用线程的方式是这样的Qt: class threadRun : public QThread { ... protected: void run(); ... } 然后实现继承的run方法 void threadRun::run() { ... } run中执行的代码将会被投递到一个线程中执行
Java中继承Thread 或者 实现Runnable都可以达到创建线程运行代码的效果
至于是继承还是implments,视具体情况而定
Java: class threadRun extends Thread { @override public void run() { ... } } 或者 class threadRun implements Runnable { @override public void run() { ... } }
C++代码实现类似效果
当不使用框架而又需要实现线程封装时可以这么做
封装posix线程接口实现类似效果
参考C++纯虚函数实现接口
http://blog.csdn.net/qq_21358401/article/details/78791563
threadWraper.cpp
#include "threadWraper.h" void *threadRun(void *args) { threadWraper *ctx = (threadWraper *)args; if (!ctx->status()) ctx->run(); return NULL; } threadWraper::threadWraper() : status_(0){ } threadWraper::~threadWraper() { } void threadWraper::start() { status_ = 0; pthread_create(&posix_, NULL, threadRun, this); pthread_detach(posix_); } void threadWraper::stop() { status_ = 1; }
threadWraper.h
#ifndef CX_SOCKET_IO_THREADWRAPER_H #define CX_SOCKET_IO_THREADWRAPER_H extern "C" { #include <pthread.h> }; class threadWraper { public: threadWraper(); virtual ~threadWraper(); virtual void run() = 0; void start(); void stop(); int status() { return status_; } private: int status_; pthread_t posix_; }; #endif //CX_SOCKET_IO_THREADWRAPER_H
技巧在于利用纯虚函数必须被派生类实现的特点
将run方法留给派生类实现,另外用pthread_create创建线程 将线程包装类threadWraper作为参数传递给pthread线程
这样可以实现所需要的效果
这里线程只是简单的封装一下 具体应用时可以视情况加入其它同步操作 比如互斥锁,条件变量,信号量,读写锁等等等等…
相关文章推荐
- C++中如何实现类似JAVA中的反射
- java5 Condition用法--实现线程间的通信
- C++实现类似JAVA反射的基本功能
- 【Java基础_(线程篇_第一篇)】继承Thread;实现runnable;sleep、wait用法和区别;Thread和Runnable区别;线程停止
- C++如何实现类似JAVA中加了FINAL关键字的类
- 在Java中实现类似C/C++中#ifdef...#endif预编译宏的效果
- C++实现类似JAVA的反射 .
- Delphi中实现C++/Java类似静态变量的功能
- c++中实现类似java printStackTrac…
- Delphi中实现C++/Java类似静态变量的功能
- java5 Condition用法--实现线程间的通信
- 在C++中实现类似Java的“synchronized”
- java5 Condition用法--实现线程间的通信
- 如何用Java实现类似c/c++指针效果
- C++中实现类似java中接口的功能
- Java实现类似C/C++中的__FILE__、__FUNC__、__
- Java实现类似C/C++中的__FILE__、__FUNC__、__LINE__等,主要用于日志等功能中。
- C++实现类似JAVA的反射
- 用C++实现类似JAVA类中的toString函数
- C++ 实现类似java c#List的方法 boost::any的使用