Android native层如何添加线程处理任务
1,创建线程类
例如TestThread继承Thread类,需要实现threadLoop来处理自己的任务。
class TestThread : public android::Thread {
public:
TestThread(sp<ExternalCameraDeviceSession> parent);
~TestThread();
virtual bool threadLoop() override;
private:
sp<ExternalCameraDeviceSession> mParent;
bool mDone;
};
TestThread::TestThread(sp<ExternalCameraDeviceSession> parent) :
mParent(parent),
mDone(false) {
ALOGI("%s enter", __FUNCTION__);
}
TestThread::~TestThread() {
ALOGI("%s enter", __FUNCTION__);
}
TestThread::TestThread(sp<ExternalCameraDeviceSession> parent) :
mParent(parent),
mDone(false) {
ALOGI("%s enter", __FUNCTION__);
}
TestThread::~TestThread() {
ALOGI("%s enter", __FUNCTION__);
}
bool TestThread::threadLoop() {
ALOGI("%s enter", __FUNCTION__);
struct stat buf;
while(!mDone) {
ALOGI("ttttttt");
if (stat("/dev/video1", &buf) == 0) {
ALOGI("plugin");
} else {
ALOGI("plugout");
mParent->notifyError(1, /*stream*/-1, ErrorCode::ERROR_DEVICE);
mDone = true;
}
sleep(1);
}
return true;
}
2,启动线程
构造线程对象,并执行run后threadLoop会自动自行。
mTestThread = new TestThread(this);
mTestThread->run("testthread", PRIORITY_BACKGROUND);
3,退出线程
线程退出后会调用虚构释放资源。
mTestThread->mDone = true;
mOutputThread->requestExit();
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/182026.html