好多人对while(true) Thread.Sleep(XX);这种写法深恶痛绝 但是我觉得存在即是合理 这种写法还是有使用场景的

OrdinaryCoder 2019-09-30 09:50:29
加精
比如一个TCP通讯 里面有一个看门狗来监听连接是否正常 我通常是用这种写法,有没有更好的写法或者改进,欢迎讨论。
...全文
4389 67 打赏 收藏 转发到动态 举报
写回复
用AI写文章
67 条回复
切换为时间正序
请发表友善的回复…
发表回复
Angelia77 2020-04-16
  • 打赏
  • 举报
回复 1
引用 3 楼 贵阳老马马善福专业维修游泳池堵漏防水工程 的回复:
我记得有个笑话,说的是一个小白写了一个程序 printf("hello world") 然后一个老菜鸟看了,说你这个硬编码,不好,应该用一个变量 另一个老菜鸟看了,说要函数复用,应该写一个函数,提取这个变量作为参数 再一个老菜鸟看了,说要面向对象 再一个说,要设计模式,将输出和字符串类型分离 再一个说,要考虑线程安全 再一个说,... 最后为了写一个大家都认为没有毛病的hello world,程序写了1万行。 最后又来了一个菜鸟,看了这代码,大家都觉得他挑不出毛病了,结果他说了一句,这程序是干嘛滴。
It's so funny!
yyy99919 2020-03-18
  • 打赏
  • 举报
回复
说得对,讲的好
Luo-99 2020-03-10
  • 打赏
  • 举报
回复
while里面不写也可以吧。
weixin_44040778 2020-02-28
  • 打赏
  • 举报
回复
试试异步,或许可以。
pjianjian 2019-10-20
  • 打赏
  • 举报
回复
引用 19 楼 良朋的回复:
我写运动控制卡程序时, 调试步骤,我就是用的While true 。 比如让丝杆从p1点运动到p2点, 丝杆到p2点后其伺服会反馈一个信号,我就是用while 判断这个信号, 来判断丝杆是否运动到了p2点, 不然的话就要靠人超长等待了,反正时间一长,它肯定会走到位的。
但自动模式下我还是不敢这么用,自动模式下我是用timer+swich+if 来判断。
我是个初学者的同行
yahle 2019-10-14
  • 打赏
  • 举报
回复
ε=(´ο`*)))唉 大家都没说对重点。 用了sleep之后,还可以向甲方多收一份性能优化的钱。
jwh2004 2019-10-09
  • 打赏
  • 举报
回复
如果只是执行一个简单的短时操作等待执行结果,当然是使用异步进行执行再用委托事件返回好;如果是通讯线程,自然是要用while(条件) Thread.Sleep(XX),而且必要用Sleep,因为cpu虽然是多核,若该线程任务重,造成cpu一个核满了,不使用Sleep则其他核也不会被分配时间片。
  • 打赏
  • 举报
回复
本来就可以写,但是你写了出问题你能定位到地方才行。
a599153361 2019-10-09
  • 打赏
  • 举报
回复
主要是来学习的,我只看看不发言
exception92 2019-10-08
  • 打赏
  • 举报
回复 1
引用 57 楼 OrdinaryCoder 的回复:
[quote=引用 56 楼 exception92 的回复:] 我并不太喜欢这样,一般都使用基于线程的timer来替换.
但是我觉得timer有一个问题就是有可能会发生这次的任务没干完下次的任务就又触发了 导致时序混乱[/quote] 这个时候任务非同步执行,就要异步了.
OrdinaryCoder 2019-10-08
  • 打赏
  • 举报
回复 1
引用 56 楼 exception92 的回复:
我并不太喜欢这样,一般都使用基于线程的timer来替换.
但是我觉得timer有一个问题就是有可能会发生这次的任务没干完下次的任务就又触发了 导致时序混乱
exception92 2019-10-08
  • 打赏
  • 举报
回复 1
我并不太喜欢这样,一般都使用基于线程的timer来替换.
xiaoxiangqing 2019-10-08
  • 打赏
  • 举报
回复
适当用就行了。
小灰狼 2019-10-08
  • 打赏
  • 举报
回复
用 sleep 的方式的优点是简单,缺点是想要安全地关闭线程会比较麻烦 以前用Java写的监控程序,用的是 wait/notifyAll 模式: 数据处理线程在取得一个对象的锁之后,在这个对象上进行 wait,等待其它线程将它唤醒。 数据监听线程在得到数据之后,把它放进数据池,然后调用锁对象的 notifyAll 方法将所有在这个对象上等待的线程唤醒。如果主线程要退出,可以将一个共享信号(通常是一个变量赋一个值)并将这些线程唤醒。线程被唤醒后,判断共享信号值,如果是要求退出,则主动退出线程,否则到共享池中取数据。 相信C#也支持同样机制,我记得好象是使用 Monitor 类!
OrdinaryCoder 2019-10-08
  • 打赏
  • 举报
回复
引用 52 楼 aaavgygjk 的回复:
我更喜欢用while(1)
C#里while(1)是错误的写法 C/C++里才能这么写
帐号已注消 2019-10-07
  • 打赏
  • 举报
回复
我更喜欢用while(1)
货郎大叔 2019-10-06
  • 打赏
  • 举报
回复
while(true){ Thread.yid(); if(xxx) break; } 这样
EBABEFAC 2019-10-05
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
我记得有个笑话,说的是一个小白写了一个程序

printf("hello world")

然后一个老菜鸟看了,说你这个硬编码,不好,应该用一个变量
另一个老菜鸟看了,说要函数复用,应该写一个函数,提取这个变量作为参数
再一个老菜鸟看了,说要面向对象
再一个说,要设计模式,将输出和字符串类型分离
再一个说,要考虑线程安全
再一个说,...

最后为了写一个大家都认为没有毛病的hello world,程序写了1万行。

最后又来了一个菜鸟,看了这代码,大家都觉得他挑不出毛病了,结果他说了一句,这程序是干嘛滴。
贫僧观你有架构师风范,帮我重构下这行代码吧
陈柏祁 2019-10-05
  • 打赏
  • 举报
回复
没什么问题,只要不是死循环或者耗费掉过多内存
一苇任逍遥 2019-10-04
  • 打赏
  • 举报
回复
不错不错,学习下
加载更多回复(47)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧