jjzjj

Coroutine

全部标签

c++ - 在 C++ 中使用 setjmp() 和 longjmp() 有安全的方法吗?

我的印象是在C++中使用setjmp()和longjmp()几乎肯定会弄乱堆栈,因为这些函数不执行展开就像,说,异常(exception)。ThisMSDNpage,但是,表明可以告知Microsoft实现调用本地对象的析构函数,这意味着谨慎使用这些函数可能是安全的。在C++中使用setjmp()和longjmp()时,是否有确保程序正确性的可移植方法?C++中的最佳实践表明异常最好不要用于流控制,但在需要非常不寻常的流的情况下(例如协程和闭包),是否总是最好使用异常来代替这些函数? 最佳答案 如果您有一些非常奇怪的要求,不允许您通

c++ - 在 asio stackful 协程中直接使用 spawn 是否安全?

当我使用spawn在协程中启动一个新的stackfull协程时,valgrind说很多使用未初始化的值(valgrindoutput)。然后我使用io_service.post调用处理程序,并在其中启动一个新的stackfull协程,一切似乎都很好。我搜索并阅读了一些文档,但找不到有关如何在stackfull协程中安全地创建新的stackfull协程的信息。代码如下:#include#include#include#include#includeusingnamespacestd;intmain(){autouse_post=false;boost::asio::io_servicei

c++ - 我应该如何在我自己的函数中传递 boost::asio::yield_context?

我正在编写一个在底层使用Boost.Asio的C++11网络库。我想公开一个允许用户使用堆栈协程的API。我应该如何在我的API函数中接受boost::asio::yield_context参数?按值(value)?引用?通过const引用?我不知道这些yield_context对象的复制成本有多高。例如:ResultremoteProcedureCall(Argsargs,boost::asio::yieldcontextyield)//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Howtopass?我知道我可以拿一个通用的引用做完美转发:templateResul

c++ - 在 C++ 游戏引擎中使用 Lua 定义 NPC 行为

我正在使用C++开发一个游戏引擎,使用Lua处理NPC行为。我在设计过程中遇到了一些问题。对于需要多于一个框架来执行的所有事情,我想使用一个进程链表(它们是C++类)。所以这个:goto(point_a)say("Ohdear,thislawnlooksreallyscruffy!")mowLawn()会创建一个GotoProcess对象,它有一个指向SayProcess对象的指针,而SayProcess对象有一个指向MowLawnProcess对象的指针。这些对象将在NPC生成时立即创建,无需进一步编写脚本。这些对象中的第一个将在每一帧更新。完成后,它将被删除,下一个将用于更新。我通

c++ - 如何使用 clang libc++ 进行静态链接

我刚刚用c++2a写了一个coroutine的测试代码。我使用clang5.0构建代码:clang++testcoroutine.cpp-std=c++2a-I../asio_alone-fcoroutines-ts-stdlib=libc++代码运行良好。现在我想静态链接libc++。这样我就可以在其他PC上运行a.out,我用谷歌搜索但只找到了-static-libstdc++。我不能使用-static-libstdc++因为libstdc++不支持coroutine。如果我使用-static-libstdc++:clang++testcoroutine.cpp-std=c++2a

c++ - C++1y标准是否考虑过支持coroutine/goroutine?

我认为协程/goroutine在必须快速执行大量并发小任务的情况下非常有用。当前的std::thread成本太高,无法满足要求。我也认为协程/goroutine不能简单地通过C++库来支持,它应该直接由语言的核心特性来实现。因为coroutine/goroutine有特殊的语义,在当前的C++标准中没有相应的概念。假设我们新增一个关键字cppgo,那么我们可能会写出如下代码:voidf(intn){...}intmain(){for(inti=0;i那该有多酷!C++1y标准是否考虑支持coroutine/goroutine? 最佳答案

【unity知识点】实现延迟调用——InvokeRepeating Invoke CancelInvoke Coroutine使用介绍

文章目录InvokeRepeatingInvokeCancelInvokeCoroutine1.使用协程(Coroutine)实现类似Invoke的延迟调用:2.要使用协程(Coroutine)来实现类似于`InvokeRepeating`的重复调用效果3.区别4.补充完结InvokeRepeatingInvokeCancelInvoke当需要在Unity中实现延迟调用的功能时,你可以使用InvokeRepeating、Invoke、CancelInvoke和协程(Coroutine)来完成。下面是它们的具体示例用法:使用InvokeRepeating方法实现重复调用:usingUnityEn

c++ - 这个 boost::asio 和 boost::coroutine 使用模式有什么问题?

在this问题我描述了boost::asio和boost::coroutine使用模式,这导致我的应用程序随机崩溃,我发布了我的代码和valgrind和GDB输出。为了进一步调查问题,我创建了较小的概念验证应用程序,它应用了相同的模式。我看到我在此处发布的源代码较小的程序中出现了同样的问题。代码启动了几个线程并创建了一个带有几个虚拟连接(用户提供的数字)的连接池。附加参数是无符号整数,它扮演伪请求的角色。sendRequest函数的虚拟实现只是启动异步计时器,等待秒数等于输入数和函数的yileds。有人能看出这段代码的问题吗?他能提出一些修复建议吗?#include"asiocorou

c++ - Boost协程断言失败

为了在boost中尝试新的协程功能,我创建了以下程序:#include#include#includetypedefboost::coroutines::coroutinecoroutine_t;voidf(coroutine_t::caller_type&ca){std::vectorvec={1,2,3};for(inti:vec){charc=ca.get();std::cout代码基于samplecodefromthedocs.我的构建命令如下:$g++-std=c++11-otest-I/usr/local/include-L/usr/local/libmain.cpp/us

c++ - boost::coroutine2 与 CoroutineTS

Boost::Coroutine2和CoroutineTS(C++20)是C++中流行的协程实现。两者都会挂起和恢复,但两种实现遵循完全不同的方法。协程TS(C++20)无堆栈返回暂停使用特殊关键字generatorGenerate(){co_yield;});boost::coroutine2堆叠通过电话暂停不要使用特殊关键字pull_typesource([](push_type&sink){sink();});有没有我应该只选择其中一个的特定用例? 最佳答案 主要的技术区别在于您是否希望能够从嵌套调用中退出。这不能使用无堆栈协