这是我的代码:
NSControl
我需要“stayAwake”功能在后台运行整个时间,直到用户输入有效数字,然后它应该停止并在for循环完成后立即重新开始。只要我想要它。 (=直到Ctrl-C)
但该计划刚刚解决:
#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);
}
}
答案 0 :(得分:1)
你有两个thread t
,其中第二个位于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);
}
}
}