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;
}
}
}