Android 中 C++ Thread线程用法

 1、Android把线程C++封装Thread类,它是线程的基类

 2、使用Thread时,创建一个类继承于Thread类,实现threadLoop()方法是纯虚函数,在子类中实现

 3、启动线程,调用run()函数

class Thread virtual public RefBase//RefBase封装sp、wp智能指针
{
public:
                        Thread(bool canCallJava = true);
                        virtual             ~Thread();

                         // 启动线程,创建一个新的线程并执行threadLoop()虚函数 

                         virtual status_t    run( const char* name = 0, int32_t priority = PRIORITY_DEFAULT,size_t stack = 0);

                         //退出线程函数(异步) 
                        virtual void        requestExit();


                       /*readyToRun()在Android4.4版本 system/core/libutils/Threads.cpp,

                         在run()函数里的_threadLoop()方法被调用self->readyToRun();初始化线程,

                         之后调用result = self->threadLoop();真正启动线程 */

                        // 可重载此虚函数进行初始化工作,为隐式调用
                        virtual status_t    readyToRun();
    
                       //线程退出(同步)
                        status_t    requestExitAndWait();
protected:
                        // 判断requestExit()是否被调用过 
                        bool        exitPending() const;
    
private:

                        // 线程函数。若此函数返回true,当requestExit()没被调用过时会再次调用此函数;若返回false,
                         在该函数返回时线程将退出

                        virtual bool        threadLoop() = 0;//纯虚函数,在子类中实现

};

举例:

Thread类继承于ReBase虛基类,new一个sp的模板类,会最终调用该类对象对Refbase重载的onFirstRef();
  例如: sp<MainThread> mMainThread; //成员变量;智能指针sp<char> == char *等价
      mMainThread = newMainThread();//new 一个sp的模板类赋值给成员变量mMainThread

     虛基类Refbase()中的onFirstRef()方法被调用,此时run()反方发被调用,线程启动,调用threadLoop()不停循环执行。

class MainThread public Thread {
public:
    MainThread();
    virtual  ~MainThread();
    virtual void onFirstRef() 

    {

        run("MainThread", PRIORITY_DEFAULT);
    }
    virtual status_t  readyToRun();
    virtual bool threadLoop();
    virtual void     requestExit();
    void requestLock();

private:
    sp<MainThreadmMainThread;
  
};


Android Studio ,您可以使用 C++ 来实现多线程。以下是一种常见的方法: 1. 在 C++ 代码,使用 `<thread>` 头文件来创建和管理线程。首先,您需要定义一个函数作为线程的入口点。例如: ```cpp #include <iostream> #include <thread> void myThreadFunction() { // 在这里执行线程的操作 std::cout << "Hello from thread!" << std::endl; } int main() { // 创建一个新的线程,并将 myThreadFunction 作为入口点 std::thread myThread(myThreadFunction); // 等待线程执行完成 myThread.join(); return 0; } ``` 2. 在 Android Studio ,您需要在 `CMakeLists.txt` 文件添加相应的配置,以便构建和链接 C++ 代码。示例的 `CMakeLists.txt` 文件如下所示: ```cmake cmake_minimum_required(VERSION 3.10.2) project(MyProject) # 设置 C++ 标准 set(CMAKE_CXX_STANDARD 11) # 添加你的 C++ 文件 add_library(native-lib SHARED native-lib.cpp) # 链接需要的库 find_library(log-lib log) target_link_libraries(native-lib ${log-lib}) ``` 3. 在您的 Android 项目,您可以通过 JNI 调用 C++ 函数。例如,在 Java 代码调用 C++线程函数: ```java public class MyJNIWrapper { static { System.loadLibrary("native-lib"); } public native void startMyThread(); } ``` 4. 在您的 C++ 代码,实现 JNI 接口并调用相应的 C++ 线程函数: ```cpp #include <jni.h> #include <iostream> #include <thread> extern "C" JNIEXPORT void JNICALL Java_com_example_myapp_MyJNIWrapper_startMyThread(JNIEnv *env, jobject /* this */) { std::thread myThread(myThreadFunction); myThread.join(); } ``` 通过以上步骤,您可以在 Android Studio 使用 C++ 实现多线程。请注意,在多线程操作,请确保正确处理线程间的同步和数据访问,以避免竞态条件和其他并发问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值