我正在为我的 Raspberry Pi 编写一个用 C 语言编写的程序,根据它是否连接到 Internet 来打开和关闭一些灯。
我完成并按我想要的方式工作的代码是这样的:
int doPing() {
int stat = system("ping -c 1 google.com");
return stat;
}
int main() {
int status;
int prev_status, isdif;
status = doPing();
if(status==0)
system("sudo /home/pi/goingWellBlink &");
else
system("sudo /home/pi/errorBlink &");
prev_status = status;
for(;;) {
status=doPing();
if(status!=prev_status)
isdif=1;
else
isdif=0;
if(isdif && status==0) {
system("sudo pkill errorBlink &");
system("sudo /home/pi/goingWellBlink &");
}
if(isdif && status!=0) {
system("sudo pkill goingWellBlink &");
system("sudo /home/pi/errorBlink &");
}
prev_status=status;
sleep(10);
}
return 0;
}
我已经编译的程序在哪里errorBlink
和是在无限循环中运行的程序,每个程序执行一些不同的光序列。goingWellBlink
基本上,主程序开始询问 ping 的返回状态,并基于此启动其中一个灯序列。除非检测到 ping 的返回状态发生变化,否则该灯序列不会改变。
出于可移植性的目的,而不是依赖于两个文件确实存在,我想插入代码中,errorBlink
并goingWellBlink
作为 void 函数并执行相同的代码,但使用线程。而不是启动一个外部程序,用光序列启动一个线程,我怎么能做到这一点?