粉丝1431获赞4470
这是国产的众为新的四座机器人,我这里做了一个马舵的。呃,这个程序。嗯, 他这个有一个仿真。嗯,先 速度上呢,也是可以啊。加速。嗯,加快了。加快,加快,那测速的话就是百分之五十九吧 的速率,可以减慢一点。程序设置。是啊,百分之三十啊, 这是一个他的一个轨迹。嗯,从这里取料,然后在这里码五层系列的一个一层码盘呢。啊, 这边有一个轨迹也是一样的。效果清楚一下, 这我可以旋转一个 手动,还可以显示他的一个坐标, 他的这个 他有一些视觉啊。嗯,这视觉呢?他是 我停下来啊,停下来看一看啊,这个机型的视觉标定啊,他有,他有一般只能到九点,我这个可以到十六点,二十五点可以标定啊。嗯, 相机呢,他是有一些机变的,所以所以他用点数标定的,点数越多,嗯,误差越小。嗯,马上就吃饭, 饭已经蒸好了,我们再继续练练左手啊。嗯, 呃,这个在系统上面呢,他有一些调试助手,你看要调 老师。助手呢,他就是有一个网络助手,你可以主太为客户端,主太为服务器,还有一个 udp 的通信串口上面呢,他也可以打开,如果你的电脑上面有串口,他也发送这些。一般的机身软件是不带有这些。呃,助手的啊, 这个是跟爱普生相比,他是性能是优于爱普生的啊。编程的,编程的这个啊, 编程的这个方式啊,这里呢就是一个屎能,这个地方就是屎能打开啊,这是他的一个状态, 是他的一个用户权限。嗯,给他的一批地址连接上呢,他的程序大概就是这样的,初始的配置我这里有一个速率, 还有一个调试,打半点可以对每一个指令啊?跳转到这里,他暂停,看你的位置对不对?看这里。
呃,各位同学大家好,我是龚宏瓜老师。呃呃,昨天呢,在学员群里面有两个同学还是对这个多县城的,我们这个呃创建多县城,然后我们暂停县城,还有继续县城,最后把县城给取消掉, 具体怎么来操作呢?还是有点思路不太清晰。然后呢,这个也是比较啊,大家经常用到的一个功能啊,所以说老师呢,这节课 单独的那个再传一个视频啊,因为在我们课程里已经详细都已经讲的很透彻了,然后老师这节课给同学再讲的比较通俗一些啊,来让我们这个呃 同学呢能掌握的更理解的更清楚一些啊。然后老师呢,现在做了一个这么很简单的一个小英雄程序啊, 假如说我们现在创建一个县城,那么在这里面呢会,呃,每每间隔一段时间呢,会打印输出我们这个一个数字,对吧?然后我们把这个县城暂停掉,然后呢 我们继续啊,继续走我们的县城,然后呢,最后我们要把这县城给取消了,对吧?那现在这县城已经没了,然后重新我们再创建这个县城呢,我们重新创建的话,他又从头又开始来走了, 对吧?我们这节课给同学们讲一下这四个功能啊,创建,暂停,继续取消啊,非常简单,但是呢又很实用,所以老师这节课给同学们讲一下,我们先看一下创建现场, 那么创建线程呢?我们这里面先不用看上面,对吧?我们先看到这里面,我们通过 task 点 factory 对吧?来,然后点 star, star afterno, 对吧?通过这样的一个,通过我们这个呃,多线层这个工厂,踏实个工厂,他这个 start new 这样的方式,当然了,你也可以通过踏实的点 run 啊,直接来运行也是可以的啊,这个创建多线层方式很多哈, 我们通过踏实点 factory 点 start new 这样的话呢,然后创建了一个一个县城,然后在这里面呢,我们常规的写法,对,就是这么来写,然后在这里面呢,同学要注意一下啊。 呃,我们为了一会我们能取消县城和暂停和继续县城,对吧?我们首先先不看取消县城,我们先看一下暂停和继续, 那么在这里呢,老师在这里面写了一个 m 点 vit one, 对吧?把这行代码呢写在了这个 for 循环里面,这个 for 循环呢,就假装是我们的这个一个多线层的一个非常好 耗时的一个任务,要一直循环运行的一个任务,对吧?包括你读写数据啊等等的,老师这里就通过这个,呃,打印输出我们的这个 k 值啊,是一个一个意思。然后我们看下这个 m 是什么 m 呢?是我们的这个 menu reset event, 对吧?同学们要注意要用到这个类,对吧?把这个类怎么理解?你看他的解释啊,写了一大堆,老师给同学告诉怎么理解这个这个类啊,就相当于我们是手动模拟一个事件,对吧?手动模拟一个事件, 那么呢,手动模拟一个事件呢?在这里 vit one, 什么意思?我就是这个 m, 就是我模拟出来的这个事件,在这里 vit one。 那么我如果在这里这个事件呢?我通过我看看我这个事件完没完成,因为我这是模拟出 出来的吗?对吧?如果这个事件没有完成,那我就相当于是主色啊,就在这里是主色调了,如果这个事件完成了,我才允许往下直行,那么也就是说如果说我这里没有完成,那么的话,就是 他相当于给我们原来这个多线城进行了暂停,对吧?他就一直运行我们这个手动模拟的这个事件,对吧?如果这个模拟的事件完成了,去了给出信号了,那么我才允许多线城继续往下执行,那也就是我针对于我这个多线城的继续, 大家能不能明白这个意思,然后的话呢,我们把这个对象呢,我们给实力化,在这里实力化,实力化呢,我们传递进来一个参数,是 two, 对吧?传递进来一个参数 two, two 的意思呢?就是表示我们这个对象一上来呢,他就是已经完成了,已经完成了的话呢,我就不会在这个位置进行主射了,就会继续往 往下直行打印输出我们的这个 k 值,那如果把这里改成 force, 同学们看一下,那么我这个对象呢,一上来就是没有完成,没有收到完成的信号,那么这段代码就就相对于我这个手动模拟出来的事件呢,一直在运行,对吧?一直在运行, 所以这个时候我们创建线上看一下,准备看一下他并没有并没有输出,为什么?因为我们这个作业成一直主赛主设在这个位置了,对吧?所以这个位置就是同学们理解一下这个,我们这个这个含义啊,一定要把这个思路给理解清楚。 如果是 q 的话,我们这里面呢就说明我们这个手动模拟出来的线这个事件呢,他已经完成了,他就不会主射啊,把这想清楚,那么呢,我如果通过这个呃单机我们的这个 recite 按钮,对吧?那么这单击 recite 就是单击我们的这个暂停线程,那就相当于什么呢?我们的 m 点 recite, m 点 recite 就相当于我们 给这个手动模拟出来的这个事件呢,让他搜到我们的这个呃主色的信号,对吧?搜到主色的信号,然后呢让我们这个多线层呢进行暂停,如果说想继续的话呢,就是让我们这个 m 点 set, m 点 sit 呢,就是说给我们的这个手动模拟出来的事件呢,给他一个 true 的信号,代表我们的 m 这个事件呢,已经完成了 啊,你这段已经不用注册了,已经完成了,可以继续往下执行了,相当于对我们多县城的呢,就已经啊,让他继续执行,对吧?就属于暂停继续了,对吧?让我们多县城继续 去了,就这个意思,一个通过 i'm recite, 一个通过 i'm set 啊,都是通过我们对这个手动模拟出来这个事件的,对他的操作 就是对这行代码的主色和继续来控制我们多线程的。呃,暂停和继续是这个意思,所以这个方法非常经常用,同学们一定要注意啊。 然后最后呢是我们取消线程,取消线程呢,这也是非常常用的方式哈,就是我们同学们看一下创建多线程的时候呢,我们这里面有第二个有个参数,对吧?第二参数呢是这个 consolation, consolation token, 这就是我们的取消令牌,对吧?那么取消令牌呢? 我们就把这样的一个,呃,他需要一个 constellation token, 这样的一个对象,对吧?我们就实力化这样的一个对象,那么实力化这样的一个对象,这个对 像从哪来呢?对吧?它是从哪产生的呢?它是从我们 ctrl 类型 taken sauce, 对吧?从我们取消令牌的来源这个对象里面来产生出来的,那么我们必须得实力化这样的一个 ctrl 类型 total sauce, 对吧?然后通过我们这个 token source 里面的这个 token 这样的一个属性呢,获取到我们的这个取消令牌,对吧?通过这样的一种方式,然后把这个参数呢,把这个 ctrl 的一些 token 呢放在这里面,然后放在这个多线程的第二个参数里面,然后呢就相对于给我们这个多线程呢啊,他 注册了这样的一个,呃,取消的这样的一个令牌,对吧?然后呢在这个循环多现成循环里面呢?我们写这样的一个 ethels, 对吧? if 我们的这个取消令牌,它呢?它的取消 请求,对吧?如果说得到了,我们就 return, return 呢?就跳出我们这个多线程了,对吧?跳出我们这个方法本身了,对吧?呃,然后呢?所以说呢,我们在这里呢,当我们单击这个取消线程的时候,我们注意,同学们注意看一下这里面,因为我们这个 取消令牌已经绑定到了我们这个多线城了,对吧?然后我们这个取消令牌呢,它是从我们的这个 token source 来的,对吧?那么我们对这个 token source 点看守,调用这个方法就可以取消我们的这个多线城了,对吧? 创建,对吧?然后呢直接给他取消,对吧?他收到取消请求了,直接 return 了,对吧?就直接结束了,就是这样的一个过程,然后的话呢?呃,如, 如果说这里面还有一个方式哈,我如果这里面还有一个方法给同学们介绍一下,就是如果说我这个 top 跟 sos, 他还有一个就是说如果我想两秒钟之后再取消,假如说三秒吧,三秒钟之后再取消,他有这样的一个方法, ctrl after 加入创建,然后暂停继续,对吧?然后我单击取消现成, 同学们看一下他又过了过了三秒钟,对吧?这时候线程才取消掉。那么这节课呢,主要给同学们就是很直观的讲一下我们这个多线程啊,怎么样呢?来进行一个暂停和继续。那么介绍到了这两个类,对吧?一个是我们这个 手动模拟四键,对吧?我们叫 menu reset event 这样的一个类,还有一个呢,就是我们这个取消令牌和取消令牌的来源,对吧?那么 这个呢,内容也比较简单,同学们因为群里面有同学问啊,然后老师就给同学们单独录这样的一个视频,因为我们在做项目的时候啊,多线程要经常要用啊,包括我们通过我们这个 task, 对吧?通过我们这个 task 点 there wait any, 对吧? there wait any task, there wait all。 同学们,同学们一定要把这个下去,以后一定要好好理解一下,对吧? task 点儿我们再有 wait on, 对吧? 为同奥。然后呢,我们这里面着重要跟大家说一下,这里面有 when, 爱你,对吧?那么我们的 when 你是当某些能结束的时候,然后程序继续往下执行,那它跟 with 爱你它有什么区别,对吧?有什么区别对吧?还有 问哦和喂头哦有什么区别?同学们,对多县城啊,一定要把这些小例子一定要好好的理解,这样的话呢,在做项目过程中呢,我们思路才能很清晰,对吧?才能很清晰。那么同学呢,这两天做活动,然后来了非常多的同学啊,跟老师这个从零基础开始学, 然后呢?呃,谢谢同学们的支持和鼓励。呃,关老师会把那个我们的 cerp 尚未及的课程呢,包括呃后面要更新的内容给同学们,一直啊做下去, 把我们工控这个行业跟 csap 相关的工控技术都会呃一一给同学们讲到。所以希望同学们持续的啊关注工控管老师,然后有任何问题呢,可以加管老师微信进我们学员群,然后系统的从零开始学习。那这节课讲到这里,谢谢大家。
那如何停止一个正在运行的县城呢?要停止一个正在运行的县城,通常有几种方法,但是需要根据具体的情况选择适当的方式,因为县城的停止涉及到县城的安全和资源释放的问题。常用的停止县城的方法,第一种,使用 标志位。在县城的执行题中,使用一个标志位,当该标志位为处时,县城会自行退出执行,这是一种比较安全和可控的方式。关于这个问题的详细文字版,我已经整理了一份八十万字的专案秘书大全笔记,放在视频的最后面,坚持看完一定对你有帮助。 第二种,使用 interrupt 方法。使用线程的 interrupt 方法可以中断线程的执行。在线程的执行体中,可以使用 sarah 的点 clinter serra 的点 is interrupted, 检查线程是否被中断,然后再做出相应的处理。在这个方法中呢,线程 需要主动检查是否被中撞,并根据需要停止执行。第三种呢,使用 sera 的点 store 方法,当然,这种方式呢,不推荐使用。呃,这种方式呢,它可以强制地停止一个县城,但是不建议使用它啊,因为它可能会导致县城的状态不一致和资源的泄露的问题, 容易引发不可预测的错误。第四种呢,是用 execute service。 如果县城是通过 execute service 创建的,那可以使用杀了到或者杀了到闹方法来停止县城池中的县城。 第五种,使用 future。 如果现成是通过 future 对象启动的,可以使用谈 self 方法来取消现成的执行。那总的来说呢,为了安全的停止现成,建议使用标志位或 interrupt 方法,并在现成的执行体中检查相应的标志位 或中断状态。避免使用 sera 的点 stop 方法,以及要谨慎处理现成的资源释放问题。 nice。
如何停止一个正在运行的线程?好,那我们来看一下我们加法中的线程,是和操作系统内核的线程啊,一一对应的。那我们要停止一个加法的线程,实际上他自己本身需要调用操作性内核来完成这个线程停止, 就相当于我们电用操作系统啊,跳一下一样。好,那么节目呢?他只是做了一层包装,那我们要想进行现在的停止的话,他给我们提供了一个现成,里面有个石头布方法,通过石头布方法可以进行现在停止,但是我们看一下这个石头布方法, 这个说过方法现在已经标记成过时了,因为这个方法停止县城不是很安全。好,我们看下我们的代码,目前我们这个县城它里面有个外循环,打印一句话,然后让这个县城启动,我们来先运行一下看一下。好,那这个时候你看 我们这个线程一直都在运行,我先把它停掉。那怎么样把这个线程停下来呢?我们可以把这个线程中断一下,然后呢我们在这个里面进一个判断啊,如果说我们当前这个线程 他是中断了的状态。好,那这个时候我们就不认可,这样我们就可以把这个线给推出了。好,现在我们再运行一下。 好,这个时候他可以退出啊,当然我们为了看这个效果,我们可以在这里啊先看一下,让他修别个几秒,先让他先让他循环几次,然后我们再给他中断, 好,然后中断啊,然后程序退出。好,所以我们可以通过啊,这个中断和中断状态两个结合起来,让正在运行的线程停下来。
学习完构建多县城以后,我们还是用同样的例子讲一下县城所和县城主色,如果没有县城所的话,我们可以看到每次执行 他的主线程结束这几个字并不一定都是最后才能输出的啊。比如说这次,那么为了让子线程结束以后再执行主线程,我们就需要用到线程锁,那线程锁的方法就是我们要用一个啊, sredding 点 lock, 我们把它 先声明一个锁啊,实力化一个对象,然后呢,给每一个县城里面先给他上锁啊,再给他解锁。那么上锁的语句是啊, s 点啊,快啊,括弧啊,上了锁就要解锁,那么解锁就是 s 点瑞丽丝,那么给县城一上完锁以后,还要给县城二上锁,那么是同样的方法, 那么给现成一和二上完锁以后,我们再次执行一下啊,我们发现现在正巧,但是我们多执行几次, 哎,我们发现他主线层仍然跑到了前面,那这是为什么呢?啊?因为我们还要用到一个线层阻塞, 现在只是给两个紫线城赋予了顺序,先紫线城一,后紫线城二。那么主线城如何才可以紫线城跑完以后再执行主线城呢?这时我们就要用到啊,县城主色,县城主色, 他的语法是一点兆,然后再 t 二点兆。现成主册的作用就可以使主线城会一直等待子线城 运行,直到子线成运行完毕以后才开始执行,不限款。无论执行多少次啊,他的结果都是一样的,我们在此外执行一下,多执行几次,不管多少次,他的结果都不会变。
一位五年工作经验的小伙伴去某东面试,被一道县城相关的妹子们给 pass 的,说的是如何去中断一个正在运行中的县城。那么这个问题呢,很多工作两年的可能都知道,这是有些遗憾。今天呢,我给大家来分享一下我对这个问题的回答。 另外呢,我花了一个多星期准备了一份十万字的面试题解析拍照文档,想获取的小伙伴可以在我的个人主页简介中找到。 回答这个问题之前啊,我先来回顾一下什么是现成。 sred。 现成呢,是操作系统进行运算调度的最小单位。 所以呢,线程是系统级别的概念。而在加油里面实现的线程,最终的直行和调度都是由操作系统来决定的。那么 jom 呢?只是对操作系统层面的现成做了一层包装而已。所以呢,我们在加油里面要用 sweet star 的方法,他启动一个 的时候呢,只是去告诉超出系统,这个现场可以执行。但是呢,最终是交给 cpu 来执行的,由超出系统的调度算法来决定。 那从理论上来讲,要在加瓦层面去中断一个正在运行的县城,只能向类似 milix 里面的皮尔命令去结束进程的一种方式来强制终止。 那在加瓦斯瑞者的 apr 里面呢,是在提供了一个 stop 方法,可以去强行终止现成。但是呢,这种方式是不安全的,因为有可能现在的任务还没有完成,突然中断的话,会导致出现运行结果不正确的问题。 那么想要安全的去中断一个正在运行的县城,只能在县城的内部去埋下一个钩子,那么外部程序呢,通过这个钩子来触发对县城的中断的命令。因此呢,在加瓦斯的里面提供了一个叫做 inter rap 的方法。那么这个方法呢,要配合一 inter rapy 的方法来使用, 可以去实现安全的中断现成运行。来看这么一大代码。那么这种实现方法呢,并不是强制中断,而是去告诉正在运行的现成你可以停止了。那么什么时候实际停止取决于正在运行的现成。所以呢,他能够去保证现成运行结果的安全性。 这位工作五年的小伙伴呢,虽然 ciod 能够熟练上手,但是呢,和其他人拉开差距往往是工作之外的时间,对一些底层原理要有一个比较深刻的了解。我是被编程耽误的文艺汤,如果我的分享对你有帮助,请你动动手指,一键三年,分享给更多的人。关注我,面试不再难!
一个去京东面试的工作五年的粉丝来找我,他说,麦克老师,你说并发编程啊,很重要。果然,我今天又挂在一道并发编程的面试题上面了。我问他啊,问题到底是什么?他说,如何去中断一个正在运行的县城?我说,这个问题很多工作了两年的人都知道,你怎么没有回答出来? 知道的小伙伴在评论区给我刷,知道这个问题的高手部分的回答呢,我已经整理成了文档,如果你想要获得的话,可以在我的主页上去进我的粉丝群。好吧,关于这个问题,我们来看看普通人和高手的回答。普通人的回答,嗯,怎么去中断一个正在运行的县城啊? 在 sred 里面还有一个 stop 方法,可以去中指。嗯,高手的回答,关于这个问题啊,我会从几个方面来回答。首先,限制是一个系统级别的概念, 在家网里面实现的现成,最终的执行和调度都是由操作系统来决定的。 glm 只是对操作系统层面的现成做了一层包装而已,所以我们在家网里面通过 sta 的方法去启动一个现成的时候,只是告诉操作系统这个现成可以被执行了, 但是最终交给 cpu 来执行,是操作系统的调动算法来决定的。所以理论上来说,要在加瓦里面去中断一个正在运行的县城,只能像类似于雷尼克斯里面 kir 命令去结束进程的方式一样去强制宗旨。所以啊,加瓦斯 red 里面提供了一个 stop 方法,可以去强制宗旨, 但是这种方式是不安全的,因为有可能这个县城的任务还没有执行完成,导致出现运行结果不正确的现象。要想安全去中断一个正在运行的县城,只能在县城里面去埋下一个沟子,外部县城通过这个沟子来触发县城的一个中断命令。因此在佳 os red 里面提供了一个 interrupt 的方法,那么这个方法需要配合一只樱桃 rapper 的方法去使用,就可以实现现在的安全中断。那么这种实现方法并不是强制中断,而是告诉正在运行的现成你可以停止,不过是否要中断取决于正在运行的现成,所以他能够保证现成运行结果的一个安全性。以上就是我对这个问题的一个理解, 其实啊,对这个问题来说,很多工作了五年的以上的小伙伴都不一定清楚。我想说的是啊,一味的专注在 ciud 的这种自动化的重复性工作上,除了能够在前面三年能够给你带来成长以外,后续的时间啊,基本上都是在做一些重复性的劳动,和别人拉开差距恰恰是工作之外的八个小时。 好的,本期的普通人 vs 高手面试系列的视频就要到结束了,如果你喜欢我的视频,记得点赞和收藏。我是麦克,一个工作了十四年的家务程序员,咱们下期再见。
并发编程,深入原码了解如何确保县城的执行顺序。哈喽,大家好,我是架构师奶爸。在实际业务场景中,有时后启动的县城可能需要依赖先启动的县城执行完成,才能正确的执行县城中的业务逻辑, 此时就需要确保县城的执行顺序。那么如何确保县城的执行顺序呢?可以使用 thread 类中的 draw a 方法来确保县城的执行顺序。例如上面的测试代码,可以看到 t h r e a d s o r t 零二类比 t h r e a d s o r t 零幺类。在每个线程的启动方法下面添加了调用线程的中 a 方法,此时运行 t h r e a d s o r t 零二类,结果如上所示。再次运行时 结果如上所示。第三次运行时结果如上所示。可以看到每次运行的结果都是相同的。所以使用 thread drive 方法能够保证现成的先后执行顺序。 drive 方法如何确保现成的执行顺序? 既然 threat 类的 join 方法能够确保现成的执行顺序,我们就一起来看看 thread 类的 join 方法到底是个什么鬼。进入 threat 的 join 方法如上所示,可以看到 join 方法调用同类中的一个有参 join 方法,并传递参数零,继续跟进代码 如上所示,可以看到有一个 long 类型参数的中 a 方法使用了 synchronized 修饰,说明这个方法同一时刻只能被一个实力或者方法调用。由于传递的参数为零,所以程序会进入。如 图上代码逻辑。首先在代码中以 wifi 循环的方式来判断当前县城是否已经启动,处于活跃状态。如果已经启动,处于活跃状态,则调用同类中的 wit 方法并传递参数零, 继续跟进 weight 方法。如上所示,可以看到, weight 方法是一个本地方法,通过 j n i 的方式调用 j d k 底层的方法来使现成等待执行完成。 需要注意的是,调用线程的位方法时,会使主线程处于等待状态,等待子线程执行完成后再次向下执行。 也就是说,在 t h r e a d s o r t 零二类的 main 方法中,调用子线程的中 a 方法会阻塞 main 方法的执行。当子线程执行完成后, main 方法会继续向下执 行,启动第二个子县城,并执行子县城的业务逻辑,以此类推。想了解更多 java 架构师岗位知识,请关注我,架构师奶爸共同筑基 java 架构师。
大家好,欢迎大家收看由动画平台远程职业培训学校提供的众维星斯卡机器人培训与应用教程。今天我们要学习的是我们的第八章编程中常用的指令, 那么这指令是我在那个作为新的使用说明书上面截取下来的部分指令,是已经经过啊删减的一些指令,那么我自己取用的啊,剩下的都是一些啊,比较常用的一些啊算法运动指令, 所以大家如果想要了解的话,可以另外去查查找那个啊说明书上面的一些详细的资料。那么首先第一个我们要看的是我们的算数运算服务, 那么算式运算符我们有基本的加减乘除,还有啊取整除法,取余除法,指数运算,取复运算、易扩运算与运算、扩运算、取反运算,左移以及右移运算。 那么我们这这边最常用的啊,就是我们的一个加减乘除四种的一个运算法则。 我们看一下这边啊有一个举例是我们的一个加法运算,上市运算服提供了各种时速的运算功能,整形数据的未运算功能等, 我们看加法啊,加法运算可以实现两个点位数据的加法运算。 local, local 是我们的一个局部变量,我们把括尾的一 当成我们啊用来做一个定义,定义为一个局部变量,那么我们的 pod 二也是一样, pod 三同样也是都是定义为局部变量,然后我们的一个, 然后后面我们碰的一等于啊,大括号等于什么呢?我们的 x 轴啊,等于十, y 轴等于二,十, g 轴等于三,十, c 轴啊,等于十, h 等于零 意思,然后我们啊把我们的破的一跟破的二两个点位啊,两个点位的数据进行相加运算程序,以后啊破的三点的数据中, x 为二十啊, y 为四十, z 为六十, c 为二十, h 为我们点位的手续,相加后已破 一点手续为准啊,就是我们加出来,我们通过这一个加法指令,把我们两个点的啊位置进行相加,最终得到我们碰的三点的一个点位,同时我们也可以对他的一个左右手续进行一个判断。 然后接下来我们看一下我们的一个关系运算服,关系运算服啊, 那么我们关心算符常用的就是我们的这些等于不等于啊,还有我们的小于等于大于,等于大于跟小于跟大于指令啊, 像我们这种关心算服务,经常用在流程控制区的一个条件判断里面,像我们现在下面的这个, 呃,第一个例子, logo a 等于十, logo b 等于二十,如果 a 等于 b, 那么啊这边他没有输入条件,这边例子里面好就给大家说,好像说啊,要是我们 a 等于 b 的话,那我们可以执行一个 a 加一或者 b 加一,如果 a 小于 b, 那么 又会啊,执行什么样的结果?如果 a 小于二十,那么我们也可以执行什么样的结果啊?这个就是我们用来做一个等于小于啊,等于小于以及大于啊,也是小于的一个比较啊, 那么我们的等号可以比较字符串类型的一个变量,像我们可以啊去比较啊,我们这种 uber 啊,就是我们这种字符串啊,如果我们的 a 等于字符状,那么就可以执行什么样的条件啊,指什么样的结果啊,然后记得我们 看下面的一些啊,逻辑应算指令啊,这种括啊非语,还有我们的假,以及我们的真啊,这边这边的一个真括的假啊,是我们用的最多的,常用的两个指令。然后我们需要注意的是,我们的 new 也是为假, 我们看一下柔情算服,经常用在流程控制语句的条件判断中。像我们这边的第一个例子,如果五或者六啊,那么就直径怎么那么就怎么样啊,他这边应该是少了,如果 a 等于五或者六,那么我们就直径什么东西啊,像我们这种 local a 等于三十, local b 等于处,如果 a and b 啊,我们都是说的他那处的话,那么就怎么样啊?还有像我们这种 local a 等于零, local b 等于一, 如果 a and b, 那么啊我们相加,那么就怎么样啊?我们需要注意的是,在我们的 ai 语言中,只有 new 和 force 值为假,其他值都为真,包括零也为真。 上面视力第九行的条件是成立的,我们看一下第九行,一二三四五六七八九啊。像我们这边如果 a 和 b 都为真,那么我们就执行什么样的条件,那么我们看到我们这边零啊,零也是一个实数,所以我们也要把它当做一个真的条件 好。然后我们看一下他的一些啊,一般符号啊,像我们这种井号,这求我们数组的长度,等号是负值啊,两个点啊,两个横杠啊,是我们的一个单行注释, 看我们的多函注示开始,以及我们多函注示结尾。还有我们这种啊,用于函数定义调用啊,用于定义 table 数组 table 数组元素操作服务,那么我们这边用的最多的也就是我们的这种标签,跟我们的一个 go to 啊,我们的标签, 那么看一下下面的一个举例说明,我们的 local a, 逗号 b, 逗号 c 啊,我们要注意我们是可以使用这种语法 啊,就连连续定义三个变量啊,这三个变量我们可以用一个逗号隔开,那么后面等于一逗号二,逗号三,就是我们把一复制给 a, 二复制给 b, 三复制给 c, 然后下面啊我们看一下他后面注视用逗号符号写多变量复制一句,然后下面的 p 点 x, 那我们用 用点号符号访问数组元数,然后还有我们后面这个 local a 等于十二十三十,那么就是我们把啊 a 当成一个数组的一个名称,然后去对他进行一个变量的复制,然后 a 中括号一啊,用中括号符号定义数组元数啊, 然后我们这种两个点啊,围着中间的一个数值啊,一个一个啊,一个变量啊,或者是叫他一个名称,那么我们就啊就表明我们是定义的一个标签啊,我们可以直接把它当做一个标签啊,我们用来 go to 跳转的位置的标签, 我们需要注意的是 table 类型数组变量下标是从一开始向我们的四立四的值为十啊,好,然后我们接着往下看,看一下我们的一些 啊,一般关键字啊,一般关键字像我们的 break 啊,我们用来跳出 for 循环, y o 循环跟 b p 循环的这种啊指令,然后还有 logo 定义局部变量六,变量为空值啊,就说把我们这个空值付给我们的一个变量, 还有个 return 啊, return 是在我们的一个函数啊,用来用来做一个函数的调用返回, 那么看一下它的一些啊,举例说明项目的一个 local a 啊,那么就是啊,定义一个 a, a 的一个变量啊, 生命局部变量 a 为 a, 值为六,就是我们只是把它定义好了以后,它里面是没有值的,它里面连零都不是,我们要是零的话,那么还是个增值,但是我们定义好了以后,它里面是不存在数字的,所以它是一个六值,一个空值, 然后我们定义一个 b 啊,一个 table 数组 b, 然后后面还有一个 table 二维数组,然后还有可以定义它的一个字符串变量 a 等于 robot 啊, 那么再看一下这个啊,过程控制指令, if 啊, if 指令, while 指令, for 指令, rep 指令, go to 以及翻损啊, 我们看一下我们的 if 指令, if 指令是我们的一个条件分支指令啊,那么这个就是它的一个格式,如果啊 if 肯定损,如我们这个条件满足了,肯定损,就是条件的意思, 如果我们的这个肯定选条件满足了以后,电啊,我们要干嘛呢?我们就做这里面的这个东西啊,这里面电帕啊,就是说让我们填填我们需要做的东西,然后就 结束啊,扩视,我们可以做 if condition 啊,条件满足了以后我们做什么啊?否则的话我们做什么啊?自己条件满足了就做这里面的东西,不然的话就做 else pad 这里面的东西啊,扩视,我们啊,我们可以选用啊,第三种啊,第三种 if ctrl, 如果条件满足了,我们就做什么?否则啊,否则。如果肯定啊,如果第二个条件满足了的话,那我们就做第二个东西。那如果上述两个。
小白编程困惑之,县城安全之前的视频当中啊,我们讲了什么是多县城啊? 那多线绳就是同时让 cpu 干多个事啊,那如果多个 cpu 啊,同时在干一个事的时候呢,就会出现线上安全的问题啊。 举个例子,我们有一个硬特性的变量,他的处事值是零啊,我开一个县城给他加一啊,我再开另外一个县城给他加二啊,那我们最终期望的结果,这个二啊,应该是三。嗯, 但是呢,如果你在不加锁的情况下,他有可能是一,有可能是二,也有可能是三啊,那为什么这样呢?今天教大家一招啊,来彻底的掌握什么叫县城安全啊。我们拿出两 两个手啊,这个手呢,代表的是一个县城啊,这个手呢代表的是另一个县城啊, 那这个手的这个呢,表示的是我从内存的把爱取出来啊,那这个呢,是表示我加一啊,并且把这个加一之后的结果放回到内存当中啊, 那这个现成也是类似的啊,这个就是从内存中拿出爱来啊,加二放回去啊,那在并发的过程中呢,他们的执行的顺序啊,有可能是这个样子的, 这个样子,这个样子,这个样子以及这个样子啊,那什么时候会出现县城不安全呢啊?那只有这样和这样的时候啊,县城是安全的,那其他的时候啊,县城都是不安全的啊。那么来举个例子啊,比如说是这个样子啊, 这个线程首先在内存里拿的是爱啊,他是零,然后呢,他加了二,他放回到内存中变成二了,对吧?那这个线程呢,他拿的是零啊,因为他在放之前拿的对不对? 他又把加一之后的值放回来内存中,那最终呢,这个爱啊,就是一啊,那怎么解决这个问题呢?我们就要使用啊,锁啊锁呢,其实会让这两个操作变成一个原子操作,嗯, 也就是这个样啊,他们的执行结果要不就是这样,要不就是这样啊,这样呢就会保证县城的安全,从而让爱成为真正的我们的预期。三啊,小伙伴们学会了吗?欢迎大家关注我,与我交流。
脚本开发中县城是个什么东西?呃,行, 来看这个问题,就说呢,这个关于这个线程,他是一个什么东西啊?老师,我最近摇了没看这个教程啊,看像有没有这个线程的教程,这个能不能教教? 呃,什么情况?现在什么时候讲一下啊?因为这段时间呢,我也休休息来着啊,也是受这个疫情的一个影响,休息了一段时间。 这个线程的话还是比较简单的啊,他就是相当于是什么呢?相当于是一个同时启动的插件啊,可以这样的去理解。行,那么我这边呢是在收到学员问题之后呢啊,马上的对他进行了一个解答啊,咱们来 看下这个视频。呃,行,好,来讲一下这个县城啊,这个县城的话理解起来也是比较简单的,他也不是一个复杂的东西。呃,我先打开一下这边的一个桌面画板呀, 之前咱们讲到什么?讲到了这个插件,对吧?讲到的这个插件可以通过呢,这边呢点击这个插件呢去加入到里,加入一个之前咱们所写好的一个插件啊,加入到另外的一个插件里面来, 这个呢就不再去进行过多的一个讲解了啊,因为说啊,咱们这个课程里面都有啊,都有,而这个线程呢,它就相当 什么呢?呃,同时去启动这个插件啊,这个插件呢如果说咱们去正常的运行的话,正常的咱们来运行一下, 在这边呢咱们去创建一个新的插件,然后呢在这边把这个插件一,先来看一下这个插件一里面。呃,先来看一下这个 信息一里面有什么啊?咱们去进行选择,然后呢可以看到里面呢是一个无限循环啊,接着呢是一个弹出提示,执行四个幺啊,然后呢是一个循环尾, 接着来看信息二里面有哪些的内容,然后也可以看到啊,也是一个无限循环,然后呢去弹出一个,不停的去弹出这个提示呃执行四个二,对吧? 如果说呢,咱们去正常的来讲选择插件,正常的咱们给它加入信息一, 还有加入这个信息二,插件信息二正常的来讲,他会把插件一里面的内容全部执行完毕之后,再去执行这个插件二里面的内容,对吧?咱们可以来运行一下,看一看这个效果, 可以发现呢,他是不断的去呃执行这个信息提示啊, 下面的这个插件并没有去被运行,因为说呢,呃,咱们添加这个插件的话呢,需要把上上面的他的这个插件执行完毕之后, 插件里面的内容执行完毕之后才会去执行下面的,呃,这个插件的他的命令。 而县城的话呢,就是说啊,可以同时的去进行执行啊,能够同时的去进行执行啊。再来看一下这个新建插件一里面的例子啊,咱们把这边的这个其他函数给他注视一下 啊,对,点击这边的一个放大镜,呃,这个其他函数里面的停止一个线程给他注视一下, 注视的意思啊,就是说啊,这行的代码不再去生效啊,然后呢咱们再来运行一下,看一看是一个什么的效果,可以发现呢,这边就是不断的灾区进行变化了, 为什么会出现这样的一个效果呢?咱们来看一下他的一个脚本的一个执行的呃顺序,因为说呢这个线程呢是同时的去进行执行,对吧?同时的去进行执行,那么这个其他线程里面其他函数里面启动一个线程,启动的线程呢, 就是新,就是这个信息一,而这边这个启动一个线程呢就是一个信息二啊, 他也也是和这个插件里面去直接的加入到插件啊,把这个插件加入到一个,这咱们现在这个插件里面的效果是一样的,但是唯一不同的地方呢在于啊,他是同时执行, 这个加入插件呢是顺序执行,而这个加入线程呢是同时执行啊,这就是他们两个的这个呃这么一个区别,同时呢还需要注意一点呢,是下面呢必须要给他一个呃循环的时间啊,必须要给他一个循环的时间, 因为他是同时执行,所以说呢,他的一个呃现成的一个执行的时间呢,取决于咱们给到他这个插件里面的时间,如果说不去添加这个现实 循环二十秒的话,那么他就是呃执行完这边的启动一个线程之后呢,就会结束啊。当然有的同学要讲啊,这个呃启动一个线程启动的是信息一 和信息二,对吧?那么里面是里面是无限循环啊,也会被结束掉吗?啊?这个的话也是会被结束掉的啊,只要是这边的这个新建插件,他这边你不去给他添加一些的命令啊,一些的命令需要他去进行执行的话,里面的这个线程也会被结束掉 啊。再来看一下这个线程是如何的去进行添加的啊?可以点击这边的这个函数,然后函数库里面找到其他的函数,接着去进行下 去,找到这个启动一个线程啊,来看一下第一个的参数,第一个参数是启动一个线程运行指定的插件啊。呃,多线绳呢?是同时直行啊,可以看到这边也是提到的啊, 第一个参数的话,随便的给他填都可以,填一个数字就行,整数型,呃,整数型的边上啊,也就是一个数字吧,给他填一个数字就行,咱们在这边 第一个参数呢,给它填一个数字三啊,这个数字是一个线程 id, 这个 id 是用来做什么的?是后面可以去通过这个 id 关闭掉这个线程啊,它是起这么的一个作用。然后呢第二个的参数呢,咱们可以给它一个名字啊,需要注意的是 这边呢是必须是一个字符串类型的,边上必须是一个字符串类型边上之前通过插件,对吧?咱们去里面有两个,呃,插件,一个是信息,一个是信息,还有一个呢是信息二,信息二 这两个插件,然后呢咱们就把它呀给填写进去就可以了, 需要注意的是这个字符串类型的变量必须是一个固定的格式啊,这个,呃,啊,这边来打下这个字吧,必须是呢啊,这个英文大写, 这个书法又消失了啊,看一下你那边的这个书法,如果说呢,这边是一个大写的 a, 他就是一 一个英文大写的,呃,这样的一个书法在在这边再去添加信息,写好他这个插件的名字, 选择确定,然后选择呢加入到插件,这边的这个线程 id 又消失了,咱们再给他写一下, 选择加入到插件,插入到最底部,他就是成功的,他这样的话就会成功的启动一个线程。咱们把其他的代码给注视掉,来看一下, 这个应该,呃,需要往上移一下,把上面的这三行代码全部的给注视一下, 接着来运行。可以 看到呢,这个插件呢就是被成功的执行了啊,这这样的话呢,就可以把这个插件的呃,就可以把这个插件添通过现成的方式给添加到咱们这个现在执行的插件里面来了。 这边的第三行的命令就是启动信息二啊,启动信息二这个插件, 呃,咱们把这边的这个给他删掉,接着来说一下这边 这个函数库里面的 停止一个线程,这个停止一个线程比启动一个线程还要简单啊,可以看到里面呢就是只有一个参数,这个参数呢就是填写这个线程 id 之前启动线程的话呢,咱们是给到他一个三,对吧? 那么咱们可以通过这个线程 id 呢去结束掉这个线程, 点击第一个参数,然后呢去填写三,加入到插件, 插入到最底部啊,执行账号代码之后呢,执行账号命令之后呢,这个线程呢就是会被结束掉, 同样里面的循环呢,也就不会再去生效了 啊,刚才写的那个命令和阵行命令和这个命令是一模一 一样的,和这个命令是一模一样的呃,来看一下这边的一个执行的效果,取消他,取消掉他的一个注视啊,然后选择退出。咱们来看一下, 可以看到呢,这边呢是一直在执行这 scar, 没有去执行上面的这个线程啊,因为说呢,在执行完 这边其他函数启动一个线程之后呢,下面的这个其他函数停止一个线程又给他结束掉了,所以说呢,只会去执行这个线程啊, 而到下面的二十秒结束掉之后呢,这个线乘上面的这个线乘二,也就是呃,插件里面的信息二也会被结束掉。 其实这个线程不难理解啊,它的功能呢,就是和插件一样,但是呢,与这个加入插件的区别呢在于是同啊,这个同时执行,而这个插件呢, 这个插件的话它是顺序执行啊,这点,呃,只要区分好,学这个线程的话就是学懂了。