背景功能C 带有线程
background function c++ with thread
这是我的代码:
#include <wiringPi.h>
#include <stdio.h>
#include <iostream>
#include <string>
#include <unistd.h>
#include <thread>
using namespace std;
bool running;
const int pin = 1; // Pin 18 = Pin 1 in WiringPi
void stayAwake() {
while(running) {
digitalWrite(pin, 1);
usleep(1000);
digitalWrite(pin, 0);
usleep(1000);
}
}
int main() {
if (wiringPiSetup() == -1)
return 1;
pinMode(pin, OUTPUT);
running = true;
thread t(stayAwake);
while(1) {
int input = 0;
cout << "put in a freq between 1000 and 2000:";
while(input < 1000 || input > 2000) cin >> input;
running = false;
t.join();
for(int i=0; i<=1000; i++) {
digitalWrite(pin, 1);
usleep(input);
digitalWrite(pin, 0);
usleep(1000);
}
running = true;
thread t(stayAwake);
}
}
我需要" Stayawake"功能在后台运行,直到用户进入有效数字为止,然后在For-Loop完成后,它应该停止并立即重新启动。只要我想要它。(=直到Ctrl-C)
但是该程序只是分解:
terminate called without an active exception
您有两个 thread t
s,其中第二个位于while循环的底部,立即脱离范围并在没有线程完成的情况下死亡,触发了错误。
这应该为您提供所需的行为或接近的行为。
int main() {
if (wiringPiSetup() == -1) {
return 1;
}
pinMode(pin, OUTPUT);
while(1) {
running = true;
thread t(stayAwake);
int input = 0;
cout << "put in a freq between 1000 and 2000:";
while(input < 1000 || input > 2000) cin >> input;
running = false;
t.join();
for(int i=0; i<=1000; i++) {
digitalWrite(pin, 1);
usleep(input);
digitalWrite(pin, 0);
usleep(1000);
}
}
}
相关文章:
- 如何让线程继续并启动其他功能 - C++使用 OpenMP?
- 线程功能之一不执行可能的比赛条件
- XLL功能的线程安全
- 如何实现功能线程安全
- 线程安全性和静态变量/成员功能
- 串口读取功能的通信超时和线程不超时
- 从成员类功能创建线程
- 一个功能可以在几个线程上运行
- 多线程功能性能比单线螺纹差
- [[GNU :: pure]]功能属性和线程的优化问题
- 如何使用从Swift代码中调用的线程在C 上制作异步调用功能
- 检查Linux功能以设置线程优先级
- 在单独的线程中运行成员功能
- 如果其对象在多个线程中运行,我们是否需要锁定类成员功能
- 如何使用不同的线程访问Singleton类成员功能
- 分割故障,可能的原因:功能指针,多线程,STL地图等
- 我需要在Boost线程功能中调用Unlock()
- C++ 停止线程功能
- 如何使用 C++11 线程功能同步 2 个函数
- C++11 延迟"thread"创建(即指定线程功能但不等待创建物理线程)