Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >阻塞时停止任务

阻塞时停止任务
EN

Stack Overflow用户
提问于 2012-08-20 02:01:04
回答 2查看 834关注 0票数 1

让我先用代码来说明这个问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with Ada.Text_IO;

procedure Test
is

   task type Serving_Task is
      entry Start;
   end Serving_Task;

   task body Serving_Task is begin
      accept Start;
      Ada.Text_IO.Put_Line ("Started");
      loop
         null; --  Blocking operation, eg. accepting on a socket.
         null; --  Processing on blocking operation's result.
      end loop;
      Ada.Text_IO.Put_Line ("Stopped");
   end Serving_Task;

   type Server is tagged limited record
      Serving : Serving_Task;
   end record;

   procedure Start
     (S : in out Server)
   is begin
      Ada.Text_IO.Put_Line ("Starting");
      S.Serving.Start;
   end Start;

   procedure Stop
     (S : in out Server)
   is begin
      Ada.Text_IO.Put_Line ("Stopping");
      -- TODO To implement.
   end Stop;

   Main_Server : Server;

begin
   Ada.Text_IO.Put_Line ("Calling Start");
   Start (Main_Server);
   delay 5.0;
   Ada.Text_IO.Put_Line ("Calling Stop");
   Stop (Main_Server);
end Test;

这是典型的服务器结构--有一个带有循环的服务器任务,它接受传入的连接。我的问题是-为Server类型实现Server过程的最佳方法是什么。

我希望它等待到服务任务在接受套接字时阻塞(或者就在阻塞调用之前,所以如果在结束任务之前完全处理了每个已接受的请求),然后退出循环,这样任务就可以在结束之前清理。

想到的第一件事就是增加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select
   accept Stop;
or
   delay 0.1;
   exit;
end select;

在循环的末尾,但在每次迭代中都浪费了0.1秒。似乎意义重大。

我看过RM、Lovelace教程和Wikibook中的一些例子,但没有什么看起来真正合适。

对于Ada中的这类问题(我相信是相当常见的),最佳实践是什么?

和答案是.

基于马克C回答https://gist.github.com/3413017的示例解决方案

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-20 04:34:51

我通常的设置方式是首先使用AdaCore的GNAT.Sockets包,而不是直接编程套接字。由于我将使用(套接字) select()函数(包装为Check_Selector)在套接字上可用数据时得到通知,所以GNAT.Sockets提供了一个可以从其他地方调用的Abort_Selector()过程。在Check_Selector()上的任务被阻塞后,我只需要等待数据到达(状态=已完成)或该退出的标志(状态=中止)。

请参阅Monitor_Connections包连接中的TOMI_4_Ada过程的开始(第397-416行)。Monitor_Connections是从任务Connection_Monitoring调用的(第469-495行)。

票数 1
EN

Stack Overflow用户

发布于 2012-08-20 03:31:09

您需要否则版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
loop
   -- blocking read from socket
   -- process the data received
   select
      accept Stop;
      exit;
   else
      null;
   end select;
end loop;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12035670

复制
相关文章
Node.js 连接 MongoDB--插入数据
本章节我们将为大家介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作。
陈不成i
2021/07/13
2K0
使用insert () 在MongoDB中插入数组
“insert”命令也可以一次将多个文档插入到集合中。下面我们操作如何一次插入多个文档。
MongoDB中文社区
2020/02/19
7.7K0
使用insert () 在MongoDB中插入数组
mongoDB 文档插入
db.collection.insertOne(obj, ) 插入单个文档到一个集合(3.2版本有效),可选参数为w, wtimeout db.collection.insertMany( [objects], ) 插入多个文档到一个集合(3.2版本有效),可选参数为w, wtimeout db.collection.insert(obj) 传统的插入方式
Leshami
2018/08/13
9820
MongoDB 插入文档
BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
用户4988376
2021/08/13
1.2K0
房上的猫:数组插入算法等难点专开
一:查找算法 public class Aini { public static void main(String[] args) { // 数组查找算法 // 查找学生是否存在 // 导入扫描仪 Scanner bdqn = new Scanner(System.in); System.out.println("请输入你要查找的学生:"); String name = bdqn.next();
房上的猫
2018/03/14
7140
Node.js中的MongoDB
show dbs: 显示当前所有的数据库 use 数据库名 ":进入到指定数据库中 db :显示当前所在的数据库 show collections:显示数据库中的所有集合
不愿意做鱼的小鲸鱼
2022/08/24
5.3K0
Node.js中的MongoDB
MongoDB(7)- 文档插入操作
插入方法 db.collection.insertOne() 插入单条文档到集合中 db.collection.insertMany() 插入多条文档到集合中 db.collection.insert() 插入单条或多条文档到集合中 insertOne() 语法格式 db.collection.insertOne( <document>, { writeConcern: <document> } ) 只能传一个文档,不能是数组 insertMany() 语法格式 db.col
小菠萝测试笔记
2021/06/09
9980
nodejs连接MongoDB插入数据
昨天介绍了一下MongoDB在shell下的正删改查,今天来讲一下在nodejs中如何连接数据库以及数据的插入!
十月梦想
2018/08/29
1.7K0
node.js + mongodb 原
想写博客很长时间了,因为一直身患懒癌,所以一直拖到了现在。markdown的语法也是刚刚学,试验一下效果 好了不说了,直接上干货了。 ------------------------------------------------------------------------------------------------
笔阁
2018/09/04
2K0
node.js + mongodb 
                                                                            原
MongoDB 存储过程
MongoDB支持存储过程的使用,它的存储过程是用javascript实现的,被存在于system.js表中,可以接收和输出参数,返回执行存储过程的状态值,也可以嵌套调用。
郭顺发
2022/05/26
1.2K0
MongoDB 存储过程
MongoDB 数组在mongodb 中存在的意义
在MOGNODB 的文档设计和存储中,存在两个部分 1 嵌套 2 数组,所以如果想设计好一个MONGODB 在理解业务,读写比例,查询方式后,就需要介入到更深层次的理解嵌套的查询方式,嵌套多层后的性能问题, 数组其实比嵌套带来更多的问题,所以今天我们的从数组开始。
AustinDatabases
2022/04/05
4.3K0
MongoDB  数组在mongodb 中存在的意义
数组插入排序
插入排序是一个相对复杂一点的排序算法,但是效率要比我们以前接触过的排序算法快一些,他的思想是将数组分为两组数据(第一次分的时候就是数组第一个元素为一组,后面的所有元素为一组),然后从后面一组数据中抽取第一个元素与前面一组数据依次做对比,按需求将大的或者小的值插入到前面的一组数据中,最终后面一组数据全部插入完毕后,前面一组数据就是有序状态了。
我与梦想有个约会
2023/10/20
1250
数组插入排序
js 数组插入删除[通俗易懂]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/14
6.8K0
MongoDB 数组查询
MongoDB shell version: 2.0.0 connecting to: test
阳光岛主
2019/02/19
2.4K0
MongoDB 数组查询
三、小结 a、数组查询有精确和模糊之分,精确匹配需要指定数据元素的全部值 b、数组查询可以通过下标的方式进行查询 c、数组内嵌套文档可以通过.成员的方式进行查询 d、数组至少一个元素满足所有指定的匹配条件可以使用$elemMatch e、数组查询中返回元素的子集可以通过$slice以及占位符来实现f、占位符来实现 f、all满足所有指定的匹配条件,不考虑多出的元素以及元素顺序问题
Leshami
2018/08/13
6.8K0
MongoDB数据的插入、查询、更新和删除
在MongoDB中,我们可以使用CRUD(Create、Read、Update、Delete)操作来插入、查询、更新和删除数据。这些操作都是通过MongoDB shell或编程语言驱动程序(如Python、Java、Node.js等)来执行的。
玖叁叁
2023/04/13
2.5K0
mongodb 相关的查找,插入删除等操作
http://blog.csdn.net/mcpang/article/details/7833805
bear_fish
2018/09/20
1.4K0
图解B+树的插入过程
B+ 树在现代数据库中很常见,如果我们了解它,在工作中可能对性能优化会有更好的帮助!
业余草
2019/07/11
7.3K0
图解B+树的插入过程
MongoDB(11)- 查询数组
如果希望找到的是包含 red、blank 两个元素的数组,可以使用 $all 操作符
小菠萝测试笔记
2021/06/09
2.4K0
Python操作MongoDB数组
1. Python操作字符串数组插入元素。 # pip install pymongo==3.12.3 # 数组示例 strArr = ['a','b','c'] from pymongo import MongoClient mongoClient = MongoClient(DB_IP, username='mongo', password='password',
编程随想曲
2022/12/01
4430

相似问题

scanr是如何工作的?Haskell

23

haskell代码是如何工作的?

12

Haskell异常处理是如何工作的?

32

Haskell尾部递归是如何工作的?

52

F#是如何实现让rec的?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文