您当前的位置: 首页 > 

qianbo_insist

暂无认证

  • 0浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

在代码中实用协程(二)

qianbo_insist 发布时间:2021-02-22 22:17:01 ,浏览量:0

第一篇的链接:在代码中实用协程(一) 在网络处理程序中,一个协程正在接收网络请求者,一个协程正在循环发包,另一个协程中正发生错误,删除链接。

问题:是否可以循环链表同时进行删除和添加操作

先看一段流程

#mermaid-svg-Jru8XkpuyLxXQa6I .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-Jru8XkpuyLxXQa6I .label text{fill:#333}#mermaid-svg-Jru8XkpuyLxXQa6I .node rect,#mermaid-svg-Jru8XkpuyLxXQa6I .node circle,#mermaid-svg-Jru8XkpuyLxXQa6I .node ellipse,#mermaid-svg-Jru8XkpuyLxXQa6I .node polygon,#mermaid-svg-Jru8XkpuyLxXQa6I .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Jru8XkpuyLxXQa6I .node .label{text-align:center;fill:#333}#mermaid-svg-Jru8XkpuyLxXQa6I .node.clickable{cursor:pointer}#mermaid-svg-Jru8XkpuyLxXQa6I .arrowheadPath{fill:#333}#mermaid-svg-Jru8XkpuyLxXQa6I .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-Jru8XkpuyLxXQa6I .flowchart-link{stroke:#333;fill:none}#mermaid-svg-Jru8XkpuyLxXQa6I .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-Jru8XkpuyLxXQa6I .edgeLabel rect{opacity:0.9}#mermaid-svg-Jru8XkpuyLxXQa6I .edgeLabel span{color:#333}#mermaid-svg-Jru8XkpuyLxXQa6I .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-Jru8XkpuyLxXQa6I .cluster text{fill:#333}#mermaid-svg-Jru8XkpuyLxXQa6I div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-Jru8XkpuyLxXQa6I .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Jru8XkpuyLxXQa6I text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-Jru8XkpuyLxXQa6I .actor-line{stroke:grey}#mermaid-svg-Jru8XkpuyLxXQa6I .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-Jru8XkpuyLxXQa6I .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-Jru8XkpuyLxXQa6I #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-Jru8XkpuyLxXQa6I .sequenceNumber{fill:#fff}#mermaid-svg-Jru8XkpuyLxXQa6I #sequencenumber{fill:#333}#mermaid-svg-Jru8XkpuyLxXQa6I #crosshead path{fill:#333;stroke:#333}#mermaid-svg-Jru8XkpuyLxXQa6I .messageText{fill:#333;stroke:#333}#mermaid-svg-Jru8XkpuyLxXQa6I .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Jru8XkpuyLxXQa6I .labelText,#mermaid-svg-Jru8XkpuyLxXQa6I .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-Jru8XkpuyLxXQa6I .loopText,#mermaid-svg-Jru8XkpuyLxXQa6I .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-Jru8XkpuyLxXQa6I .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-Jru8XkpuyLxXQa6I .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Jru8XkpuyLxXQa6I .noteText,#mermaid-svg-Jru8XkpuyLxXQa6I .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-Jru8XkpuyLxXQa6I .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-Jru8XkpuyLxXQa6I .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-Jru8XkpuyLxXQa6I .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-Jru8XkpuyLxXQa6I .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Jru8XkpuyLxXQa6I .section{stroke:none;opacity:0.2}#mermaid-svg-Jru8XkpuyLxXQa6I .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-Jru8XkpuyLxXQa6I .section2{fill:#fff400}#mermaid-svg-Jru8XkpuyLxXQa6I .section1,#mermaid-svg-Jru8XkpuyLxXQa6I .section3{fill:#fff;opacity:0.2}#mermaid-svg-Jru8XkpuyLxXQa6I .sectionTitle0{fill:#333}#mermaid-svg-Jru8XkpuyLxXQa6I .sectionTitle1{fill:#333}#mermaid-svg-Jru8XkpuyLxXQa6I .sectionTitle2{fill:#333}#mermaid-svg-Jru8XkpuyLxXQa6I .sectionTitle3{fill:#333}#mermaid-svg-Jru8XkpuyLxXQa6I .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Jru8XkpuyLxXQa6I .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-Jru8XkpuyLxXQa6I .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Jru8XkpuyLxXQa6I .grid path{stroke-width:0}#mermaid-svg-Jru8XkpuyLxXQa6I .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-Jru8XkpuyLxXQa6I .task{stroke-width:2}#mermaid-svg-Jru8XkpuyLxXQa6I .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Jru8XkpuyLxXQa6I .taskText:not([font-size]){font-size:11px}#mermaid-svg-Jru8XkpuyLxXQa6I .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Jru8XkpuyLxXQa6I .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-Jru8XkpuyLxXQa6I .task.clickable{cursor:pointer}#mermaid-svg-Jru8XkpuyLxXQa6I .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Jru8XkpuyLxXQa6I .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Jru8XkpuyLxXQa6I .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Jru8XkpuyLxXQa6I .taskText0,#mermaid-svg-Jru8XkpuyLxXQa6I .taskText1,#mermaid-svg-Jru8XkpuyLxXQa6I .taskText2,#mermaid-svg-Jru8XkpuyLxXQa6I .taskText3{fill:#fff}#mermaid-svg-Jru8XkpuyLxXQa6I .task0,#mermaid-svg-Jru8XkpuyLxXQa6I .task1,#mermaid-svg-Jru8XkpuyLxXQa6I .task2,#mermaid-svg-Jru8XkpuyLxXQa6I .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-Jru8XkpuyLxXQa6I .taskTextOutside0,#mermaid-svg-Jru8XkpuyLxXQa6I .taskTextOutside2{fill:#000}#mermaid-svg-Jru8XkpuyLxXQa6I .taskTextOutside1,#mermaid-svg-Jru8XkpuyLxXQa6I .taskTextOutside3{fill:#000}#mermaid-svg-Jru8XkpuyLxXQa6I .active0,#mermaid-svg-Jru8XkpuyLxXQa6I .active1,#mermaid-svg-Jru8XkpuyLxXQa6I .active2,#mermaid-svg-Jru8XkpuyLxXQa6I .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-Jru8XkpuyLxXQa6I .activeText0,#mermaid-svg-Jru8XkpuyLxXQa6I .activeText1,#mermaid-svg-Jru8XkpuyLxXQa6I .activeText2,#mermaid-svg-Jru8XkpuyLxXQa6I .activeText3{fill:#000 !important}#mermaid-svg-Jru8XkpuyLxXQa6I .done0,#mermaid-svg-Jru8XkpuyLxXQa6I .done1,#mermaid-svg-Jru8XkpuyLxXQa6I .done2,#mermaid-svg-Jru8XkpuyLxXQa6I .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-Jru8XkpuyLxXQa6I .doneText0,#mermaid-svg-Jru8XkpuyLxXQa6I .doneText1,#mermaid-svg-Jru8XkpuyLxXQa6I .doneText2,#mermaid-svg-Jru8XkpuyLxXQa6I .doneText3{fill:#000 !important}#mermaid-svg-Jru8XkpuyLxXQa6I .crit0,#mermaid-svg-Jru8XkpuyLxXQa6I .crit1,#mermaid-svg-Jru8XkpuyLxXQa6I .crit2,#mermaid-svg-Jru8XkpuyLxXQa6I .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-Jru8XkpuyLxXQa6I .activeCrit0,#mermaid-svg-Jru8XkpuyLxXQa6I .activeCrit1,#mermaid-svg-Jru8XkpuyLxXQa6I .activeCrit2,#mermaid-svg-Jru8XkpuyLxXQa6I .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-Jru8XkpuyLxXQa6I .doneCrit0,#mermaid-svg-Jru8XkpuyLxXQa6I .doneCrit1,#mermaid-svg-Jru8XkpuyLxXQa6I .doneCrit2,#mermaid-svg-Jru8XkpuyLxXQa6I .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-Jru8XkpuyLxXQa6I .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-Jru8XkpuyLxXQa6I .milestoneText{font-style:italic}#mermaid-svg-Jru8XkpuyLxXQa6I .doneCritText0,#mermaid-svg-Jru8XkpuyLxXQa6I .doneCritText1,#mermaid-svg-Jru8XkpuyLxXQa6I .doneCritText2,#mermaid-svg-Jru8XkpuyLxXQa6I .doneCritText3{fill:#000 !important}#mermaid-svg-Jru8XkpuyLxXQa6I .activeCritText0,#mermaid-svg-Jru8XkpuyLxXQa6I .activeCritText1,#mermaid-svg-Jru8XkpuyLxXQa6I .activeCritText2,#mermaid-svg-Jru8XkpuyLxXQa6I .activeCritText3{fill:#000 !important}#mermaid-svg-Jru8XkpuyLxXQa6I .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Jru8XkpuyLxXQa6I g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-Jru8XkpuyLxXQa6I g.classGroup text .title{font-weight:bolder}#mermaid-svg-Jru8XkpuyLxXQa6I g.clickable{cursor:pointer}#mermaid-svg-Jru8XkpuyLxXQa6I g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Jru8XkpuyLxXQa6I g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Jru8XkpuyLxXQa6I .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-Jru8XkpuyLxXQa6I .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-Jru8XkpuyLxXQa6I .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Jru8XkpuyLxXQa6I .dashed-line{stroke-dasharray:3}#mermaid-svg-Jru8XkpuyLxXQa6I #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Jru8XkpuyLxXQa6I #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Jru8XkpuyLxXQa6I #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Jru8XkpuyLxXQa6I #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Jru8XkpuyLxXQa6I #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Jru8XkpuyLxXQa6I #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Jru8XkpuyLxXQa6I #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Jru8XkpuyLxXQa6I #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Jru8XkpuyLxXQa6I .commit-id,#mermaid-svg-Jru8XkpuyLxXQa6I .commit-msg,#mermaid-svg-Jru8XkpuyLxXQa6I .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Jru8XkpuyLxXQa6I .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Jru8XkpuyLxXQa6I .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Jru8XkpuyLxXQa6I g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Jru8XkpuyLxXQa6I g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-Jru8XkpuyLxXQa6I g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-Jru8XkpuyLxXQa6I g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-Jru8XkpuyLxXQa6I g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Jru8XkpuyLxXQa6I g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Jru8XkpuyLxXQa6I .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Jru8XkpuyLxXQa6I .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-Jru8XkpuyLxXQa6I .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-Jru8XkpuyLxXQa6I .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Jru8XkpuyLxXQa6I .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-Jru8XkpuyLxXQa6I .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-Jru8XkpuyLxXQa6I .edgeLabel text{fill:#333}#mermaid-svg-Jru8XkpuyLxXQa6I .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Jru8XkpuyLxXQa6I .node circle.state-start{fill:black;stroke:black}#mermaid-svg-Jru8XkpuyLxXQa6I .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-Jru8XkpuyLxXQa6I #statediagram-barbEnd{fill:#9370db}#mermaid-svg-Jru8XkpuyLxXQa6I .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Jru8XkpuyLxXQa6I .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-Jru8XkpuyLxXQa6I .statediagram-state .divider{stroke:#9370db}#mermaid-svg-Jru8XkpuyLxXQa6I .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-Jru8XkpuyLxXQa6I .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-Jru8XkpuyLxXQa6I .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-Jru8XkpuyLxXQa6I .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-Jru8XkpuyLxXQa6I .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-Jru8XkpuyLxXQa6I .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-Jru8XkpuyLxXQa6I .note-edge{stroke-dasharray:5}#mermaid-svg-Jru8XkpuyLxXQa6I .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-Jru8XkpuyLxXQa6I .error-icon{fill:#522}#mermaid-svg-Jru8XkpuyLxXQa6I .error-text{fill:#522;stroke:#522}#mermaid-svg-Jru8XkpuyLxXQa6I .edge-thickness-normal{stroke-width:2px}#mermaid-svg-Jru8XkpuyLxXQa6I .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-Jru8XkpuyLxXQa6I .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-Jru8XkpuyLxXQa6I .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-Jru8XkpuyLxXQa6I .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-Jru8XkpuyLxXQa6I .marker{fill:#333}#mermaid-svg-Jru8XkpuyLxXQa6I .marker.cross{stroke:#333} :root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-Jru8XkpuyLxXQa6I { color: rgba(0, 0, 0, 0.75); font: ; }
三个协程
接受链接
加入链表
发包
循环链表发包
错误发生
删除链表节点
单线程
End
测试 show me the code

1、定义数据结构,实用boost库的协程,其他语言都一样,不用有分别,原理都是如此

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

typedef struct network_client
{
	int x;
	int y;
	int close = 0;
	std::string name;
}network_client;

2、函数执行主协程和2个辅助协程

int main() {
    //定义一个链表,存放链接的客户
	std::list g_list;
	//定义协程0
	boost::coroutines2::coroutine::push_type coro0(
		[&](boost::coroutines2::coroutine::pull_type& yield) {
		std::stringstream sss;
		uint32_t i = 0;
		//std::cout             
关注
打赏
1663161521
查看更多评论
0.0442s