背景功能C 带有线程

background function c++ with thread

本文关键字:线程 功能 背景      更新时间:2023-10-16

这是我的代码:

#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);
        }
    }
}