美文网首页c/c++
C++ ---- 子线程切换主线程

C++ ---- 子线程切换主线程

作者: wolfaherd | 来源:发表于2021-01-19 22:32 被阅读0次

    思考

    Android开发中有子线程切换到主线程的方法,那么C++中是否也有同样的方法呢?

    经过苦思冥想(1分钟还是30分钟来着,嘿嘿🤭),我发现子线程切换到主线程不就是:1.子线程通知主线程需要执行某个函数。2.同时子线程需要等待主线程把这个函数执行完了才能继续执行。

    于是我写了下面这段代码来解释子线程切换主线程的原理,个人见解,仅供参考,欢迎沟通

    #include <iostream>
    #include <thread>
    #include <functional>
    
    using namespace::std;
    
    function<void()> mainCmdFunc = nullptr;
    
    static void CmdToMainThread(function<void()> cmdFunc)
    {
        mainCmdFunc = cmdFunc;
        while (mainCmdFunc != nullptr) {
            
        }
    }
    
    template <typename F>
    static void ExcuteLambdaFunc(F cmdFunc)
    {
        cmdFunc();
    }
    
    static void childThread()
    {
        cout << "老子是子线程" << endl;
        while (true) {
            CmdToMainThread([&]() {
                cout << "老子是从子线程来的,牛皮不?" << endl;
                });
            cout << "老子从主线程回来了" << endl;
            break;
        }
    }
    
    int main()
    {
        thread *child_thread = new thread(childThread);
    
        while (true) {
            if (mainCmdFunc != nullptr) {
                cout << "有子线程小弟有想在我家放点东西的想法,没得问题" << endl;
                ExcuteLambdaFunc(mainCmdFunc);
                mainCmdFunc = nullptr;
                cout << "子线程小弟放完赶紧滚" << endl;
            }
        }
    }
    

    相关文章

      网友评论

        本文标题:C++ ---- 子线程切换主线程

        本文链接:https://www.haomeiwen.com/subject/knzczktx.html