Boost::context模块callcc的jump_void测试代码

328 篇文章 ¥29.90 ¥99.00
本文介绍了使用Boost::context库进行协程切换的测试代码,重点讲解了callcc和jump_void函数如何在不同栈之间进行控制权转移,展示了C++中实现协程的基本方法。

Boost::context模块callcc的jump_void测试代码

Boost::context是一个跨平台的C++库,提供协程模型。其中的callcc函数可以在不同的栈上来回切换执行,实现协程的切换。而jump_void函数则可以在两个栈之间跳转,并将返回值设置为空指针。

下面是一个使用Boost::context中的callcc和jump_void函数的测试代码:

#include <boost/context/all.hpp>
#include <iostream>

void stack2(boost::context::continuation&& sink)
{
    std::cout << "enter stack2" << std::endl;
    sink = std::move(sink).resume();
    std::cout << "leave stack2" << std::endl;
}

void stack1(boost::context::continuation&& sink)
{
    std::cout << "enter stack1" << std::endl;
    sink = boost::context::callcc(std::move(sink), stack2);
    std::cout << "leave stack1" << std::endl;
}

int main()
{
    std::cout << "enter main" <<
现在又Kbuild文件如下TOP := $(srctree)/.. CAMERA_ROOT=$(TOP)/vendor/oplus/kernel/camera ifeq ($(DEVICE_MODULES_PATH),) DEVICE_MODULES_PATH = $(srctree) else LINUXINCLUDE := $(DEVCIE_MODULES_INCLUDE) $(LINUXINCLUDE) endif LINUX_INC += -Iinclude/linux \ -Iinclude/linux/drm \ -Iinclude/linux/gunyah \ -Iinclude/linux/gunyah \ -Iinclude CDEFINES += -DANI_LITTLE_BYTE_ENDIAN \ -DANI_LITTLE_BIT_ENDIAN \ -DDOT11F_LITTLE_ENDIAN_HOST \ -DANI_COMPILER_TYPE_GCC \ -DANI_OS_TYPE_ANDROID=6 \ -DPTT_SOCK_SVC_ENABLE \ -Wall\ -Werror\ -D__linux__ KBUILD_CPPFLAGS += $(CDEFINES) ifneq ($(wildcard $(CAMERA_ROOT)/config/camera.conf),) include $(CAMERA_ROOT)/config/camera.conf LINUX_INC += -include $(CAMERA_ROOT)/config/camera.h endif ccflags-y += $(LINUX_INC) ifeq ($(call cc-option-yn, -Wmaybe-uninitialized),y) EXTRA_CFLAGS += -Wmaybe-uninitialized endif ifeq ($(call cc-option-yn, -Wheader-guard),y) EXTRA_CFLAGS += -Wheader-guard endif obj-m += regulator/ obj-m += lens/ obj-m += flashlight/v4l2/ obj-m += thermal/ 还有如下Makefile # SPDX-License-Identifier: GPL-2.0-only # Copyright (C) 2018-2022 Oplus. All rights reserved. ifneq ($(wildcard $(KERNEL_SRC)/android/abi_gki_aarch64.stg),) BOOT_MIXED_BUILD=true endif KBUILD_OPTIONS+= DFT_ROOT=$(KERNEL_SRC)/$(M) KBUILD_OPTIONS += MODNAME?=dft_dlkm ifneq ($(wildcard $(KERNEL_SRC)/$(DEVICE_MODULES_REL_DIR)/Makefile.include),) include $(KERNEL_SRC)/$(DEVICE_MODULES_REL_DIR)/Makefile.include endif all: EXTRA_SYMBOLS += $(extra_symbols) all: $(MAKE) -C $(KERNEL_SRC) M=$(M) modules $(KBUILD_OPTIONS) KBUILD_EXTRA_SYMBOLS="$(EXTRA_SYMBOLS)" modules_install: $(MAKE) INSTALL_MOD_STRIP=1 -C $(KERNEL_SRC) M=$(M) modules_install %: $(MAKE) -C $(KERNEL_SRC) M=$(M) $@ $(KBUILD_OPTIONS) clean: rm -f *.o *.ko *.mod.c *.mod.o *~ .*.cmd Module.symvers rm -rf .tmp_versions 向我逐行解释这两个文件
06-18
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值