c - 为什么 WiringPiISR 在触发时不阻塞主程序?
问题描述
我正在用 C 语言开发一个在覆盆子板上运行的程序。在程序中,我想使用 WiringPiISR 来处理引脚触发的中断。然而,我发现,wiringPiISR 并没有阻塞主程序,而是创建了一个并发线程。我错过了什么吗?
最小代码示例:
#include <WiringPi.h>
#include <unistd.h>
int Check=0;
void Isr()
{
while (1)
{
sleep(1);
Check++;
}
}
int main()
{
wiringPiSetup () ;
pinMode(7, INPUT) ;
wiringPiISR (7, INT_EDGE_BOTH ,&Isr);
while (1)
{
sleep(2);
printf("check : %d", Check );
}
return 0;
}
我希望这个最小的程序在中断触发后永远不会恢复,但在我的情况下,它会继续增加变量检查并将其打印在屏幕上(两个线程同时工作)。
解决方案
假设您已经进行了无限循环和sleep()
故意调用:
sleep()
可能允许在线程之间切换。
推荐阅读
- c++ - C++ 程序问题:在抛出 'std::invalid_argument' 的实例后调用终止
- python - `np.where` 的奇怪用法
- puppet - Puppet 使用多路径配置 iSCSI
- python - 是否有与 R 的 Hmisc 包中的 spearman2 函数等效的 Python?
- php - 尝试在 php 中将新用户发布到我的 cUrl 测试环境时出现错误
- firemonkey - 读取二进制数据
- javascript - 更改元素时自动保存
- javascript - svg 转换属性正在放置带有间隙的元素
- php - 如何打印 PHP 中的值,这些值以数组格式存储在 mysql 中同名
- bluetooth-lowenergy - 如何在后台运行连接到 BLE 外围设备的 watchOS 应用程序?