21xrx.com
2024-12-22 22:25:53 Sunday
登录
文章检索 我的文章 写文章
C++主线程回调的实现方法
2023-06-22 20:16:36 深夜i     --     --
C++ 主线程 回调 实现方法

C++作为一门很常用的编程语言,也具有很多特有的编程方法。其中,回调函数就是一个很实用的功能,其可以让主线程在等待子线程完成后,却又能及时的获取子线程的执行结果。

那么,如何在C++中实现主线程的回调呢?下面就介绍一些实现方法。

1.使用函数指针

函数指针就是指向函数的指针变量,通过它可以在主线程中指定一个函数,然后在子线程完成任务后自动回调该函数。具体实现方法如下:

(1)定义一个函数指针类型,可以是typedef定义:

typedef void (*Func)(int);

(2)在主线程中定义一个回调函数,该函数可以在子线程执行完成后自动回调该函数,

void callBackFunc(int result)

  // 处理子线程返回结果

(3)将回调函数的指针传给子线程,

void subThread(Func func)

{

  // 子线程执行任务

  int result = 100;

  // 子线程完成后,回调主线程完成回调函数

  func(result);

}

(4)主线程调用子线程,并传入回调函数的指针,

Func func = &callBackFunc;

std::thread subThread(subThread, func);

2.使用Lambda表达式

Lambda表达式可以在定义时创建一个匿名函数对象,也可以包含一些非常方便的语言特性。在主线程中可以定义一个Lambda表达式并传递给子线程,以实现主线程的回调。具体实现方法如下:

(1)在主线程中定义一个Lambda表达式,

auto callBackFunc = [](int result)

  // 处理子线程返回结果

;

(2)将Lambda表达式传给子线程,

std::thread subThread([=](){

  // 子线程执行任务

  int result = 100;

  // 子线程完成后,回调主线程完成回调函数

  callBackFunc(result);

});

以上就是C++主线程回调的两种实现方法,开发者可以根据自己的代码风格和需求选择不同的方法。不论哪种方法,都需要注意回调函数的传参问题,以及线程安全问题。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复