2019/12/21 05-Event总结
多线程之间要协同工作,如果协调不好会带来很多问题,就是lock锁的问题,如果都 要用通过一个东西,就要使用协调工作了,这叫线程同步,让大家步调一致
第一个概念就是event方法,让状态值起到false和true的变化,如果拿到状态值就是true,拿不到就是false
2019/12/21 05-Event总结2019/12/21 05-Event总结
用上面的方法,要起两个线程,event有阻塞现象,把主线程阻塞住了。
一般情况下有阻塞行为的函数,如果主线程还有其他事要做,会把阻塞的语句的函数看看是否可以使用多线程,往往会放到一个线程中去跑,这样主线程就腾出来了

能否在主线程里写死循环,等你输入quit退出,输入show ,显示showthread info,,这样主线程就不适合阻塞,就可以把wait这种事情扔到线程里去跑,比如上面的boss线程,
可以有很多人关注这个状态的变化,但是置1 只能一个人来置。现在仅限于下面的模型
多人合力生产杯子就 会出现问题,就是锁 的问题

2019/12/21 05-Event总结
wait是一种阻塞的行为,虽然简单,但是导致整个线程只能做一件事情,干等着,傻傻等着就适合下面这么设计
2019/12/21 05-Event总结
如果想要做其他事情,可以改成false,外面套循环,wait如果拿不到值,就会返回false,就可以在下面之间加判断is_set,套循环加判断,非阻塞可以做其他事情
阻塞和非阻塞的编程有区别,阻塞简单,非阻塞比较麻烦,要加判断

2019/12/21 05-Event总结2019/12/21 05-Event总结
写一个自己实现的延时执行的timer2019/12/21 05-Event总结2019/12/21 05-Event总结2019/12/21 05-Event总结
这样就还没开启一个线程,只是延时执行了一个函数
2019/12/21 05-Event总结

试试运行函数,interval=3秒,把add函数传入进来2019/12/21 05-Event总结
看似可以
2019/12/21 05-Event总结
但是现在cancel依然执行,按照道理是不执行的2019/12/21 05-Event总结2019/12/21 05-Event总结
再开启一个线程
现在是start会创建一个新的线程,就是避免cancel不掉的问题
2019/12/21 05-Event总结
start启动一个run对应的线程,主线程结束才会带着工作线程消亡2019/12/21 05-Event总结
然后打印这一句 start thread end2019/12/21 05-Event总结
然后start结束了,下面的t.start就不阻塞了
2019/12/21 05-Event总结
下面的cancel,就不会wait了,直接退出,立即返回,true,下面not true,就立即返回2019/12/21 05-Event总结
现在是可以运行二次start的2019/12/21 05-Event总结
如果不允许二次start,执行完了,event是一定变化的,可以再start做判断,变化了,相当于flag做了变化2019/12/21 05-Event总结2019/12/21 05-Event总结2019/12/21 05-Event总结
这里还统计了下时间,其实这个功能性函数可以拿出来做装饰器
2019/12/21 05-Event总结2019/12/21 05-Event总结2019/12/21 05-Event总结
可以合并成这一句话
2019/12/21 05-Event总结
event的状态变化是很多的2019/12/21 05-Event总结
local里面有一些叫锁
2019/12/21 05-Event总结
到timer看一下2019/12/21 05-Event总结
代码也是分两行写,也是在这里使用了Event()对象的2019/12/21 05-Event总结

相关文章: