您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
6. 添加了XSleep完成XThread线程函数的停止和超时判断~1
发布时间:2021-06-09 11:40:19编辑:雪饮阅读()
完成线程的休眠以及停止cpp/XThread.cpp:
#include "XLog.h"
#include <thread>
using namespace std;
void XSleep(int mis)
{
chrono::milliseconds du(mis);
this_thread::sleep_for(du);
}
//启动线程
void XThread::Start()
{
isExit = false;
thread th(&XThread::ThreadMain,this);
th.detach();
}
void XThread::ThreadMain()
{
isRuning = true;
XLOGI("线程函数进入");
Main();
XLOGI("线程函数退出");
isRuning = false;
}
//通过控制isExit安全停止线程(不一定成功)
void XThread::Stop()
{XLOGI("Stop 停止线程begin!");
isExit = true;
for(int i = 0; i < 200; i++)
{
if(!isRuning)
{
XLOGI("Stop 停止线程成功!");
return;
}
XSleep(1);
}
XLOGI("Stop 停止线程超时!");
}
#include "XLog.h"
void IDemux::Main()
{
while(!isExit)
{
XData d = Read();
//XLOGI("IDemux Read %d",d.size);
//if(d.size<=0)break;
}
}
在线程头文件中要定义isExit:cpp/XThread.h:
#ifndef XPLAY_XTHREAD_H
#define XPLAY_XTHREAD_H
//sleep 毫秒
void XSleep(int mis);
//c++ 11 线程库
class XThread
{
public:
//启动线程
virtual void Start();
//通过控制isExit安全停止线程(不一定成功)
virtual void Stop();
//入口主函数
virtual void Main() {}
protected:
bool isExit = false;
bool isRuning = false;
private:
void ThreadMain();
};
#endif //XPLAY_XTHREAD_H然后就可以测试线程休眠和线程停止了cpp/native-lib.cpp:
#include <jni.h>
#include <string>
#include "FFDemux.h"
#include "XLog.h"
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_xplay_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
IDemux *de = new FFDemux();
de->Open("/sdcard/1080.mp4");
de->Start();
XSleep(3000);
de->Stop();
/*
for(;;)
{
XData d = de->Read();
XLOGI("Read data size is %d",d.size);
}
*/
return env->NewStringUTF(hello.c_str());
}在魅族16T中运行的效果,我觉得还不错哈
关键字词:XSleep
相关文章
-
无相关信息