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

思考

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

经过苦思冥想(半小时左右),我发现子线程切换到主线程不就是: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;
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容