代码问题请教

2023-02-15 11:05:54 +08:00
 kkkbbb
c++项目,如下代码:
while (1) {
sleep(10);
}
cts_zmq_deinit();
pthread_cancel(thrid_msg_recv);
pthread_cancel(thrid_msg_heartbeat);

while 循环后面的后处理有意义么?理论上会执行到么?
1260 次点击
所在节点    程序员
10 条回复
shakeyo
2023-02-15 11:16:16 +08:00
无意义,循环不会跳出,这也太基础了
大概率是调试代码
DCELL
2023-02-15 11:19:42 +08:00
这段代码包括两部分内容:

一个死循环,每次循环会暂停执行 10 秒钟。while(1)表示无限循环,sleep(10)表示暂停执行 10 秒钟。

三个线程控制命令,分别是 cts_zmq_deinit()、pthread_cancel(thrid_msg_recv)和 pthread_cancel(thrid_msg_heartbeat)。其中 cts_zmq_deinit()是一种消息传递机制,用于线程间通信,pthread_cancel 则是线程的取消函数,用于中止正在运行的线程。

综合来看,这段代码中的循环是为了不断地暂停执行,以便等待其他线程完成它们的任务。而这三个线程控制命令则是用于在适当的时候中止这些线程,以便程序可以正常结束运行。


------ by ChatGPT
okkkk
2023-02-15 11:20:01 +08:00
while (1) 死循环,后面代码永远执行不到,即使程序被终止,也执行不到。
kkkbbb
2023-02-15 11:29:53 +08:00
@DCELL 有点秀了
tyrantZhao
2023-02-15 11:36:12 +08:00
@DCELL 秀啊
oneisall8955
2023-02-15 11:36:59 +08:00
java 类似代码,编译期都过不去
billlee
2023-02-15 13:39:33 +08:00
sleep 可以被信号中断
kkkbbb
2023-02-15 14:00:48 +08:00
中断了也跳不出循环吧
@billlee
SeanTheSheep
2023-02-15 16:47:32 +08:00
这个问题引申一下,既然 while(1)会无限循环,请问 C++ compiler 会直接把后面的 identifers 剪枝吗?还是会一起编译?
kkkbbb
2023-02-16 09:43:20 +08:00
@SeanTheSheep 不会吧,while(1)后面的能不能执行取决于里面的代码逻辑,不是一定无限循环啊。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/916261

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX