c/c++

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

2021-01-19  本文已影响0人  wolfaherd

思考

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;
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读