Witam, próbuje napisać program do automatycznego wyłączania komputera o konkretnej godzinie. Pętlę sprawdzającą porównującą aktualną godzinę do zaplanowanej wrzuciłem do osobnego wątku. I gdy program uruchamia osobny wątek to się wysypuje. (jeżeli uruchomię funkcje w tym samym wątku co main() wszystko działa. Nie mam błędów kompilacji.
//funkcja main();
//reszta kodu
switch (zm)
{
case '1':
{
automatyzacja(1, 0, 0);
break;
}
bool tryb_automat = 1;
void automatyzacja(bool m, int aGodz, int aMin)
{
//if (m == 1) tryb_automat = 1;
//if (m == 0) tryb_automat = 0;
if (tryb_automat == 1 && aGodz == 0 && aMin == 0)
{
cout << "\n\nPodaj o której godzinie chcesz wyłączyć komputer:\n";
GODZINA:
cout << "Godzina: ";
cin >> Godz;
if (Godz <= 0 || Godz > 23)
{
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
cout << "\a\nWpisałeś niepoprawną godzinę! Spróbuj ponownie!\n";
SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
goto GODZINA;
}
MINUTY:
cout << "\nMinut: ";
cin >> Min;
if (Min <= 0 || Min >= 60)
{
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
cout << "\a\nWpisałeś niepoprawną ilość minut!!! Spróbuj ponownie!\n";
SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
goto MINUTY;
}
//cout << "\n\naGodz = " << aGodz << "\t\taMin = " << aMin;
cout << "\nGotowe! Komputer wyłączy się o " << Godz << ":" << Min << endl;
}
thread wylacznik1(automat, aGodz, aMin); //tylko z tym nie działa
//wylacznik1.join(); //działa
}
void automat(int aGodz, int aMin)
{
while (tryb_automat == 1)
{
if (aGodz >= 0 && aGodz < 24 && aMin >= 0 && aMin <= 60)
{
update_czas();
if (godzina == aGodz && minuta == aMin)
{
system("shutdown -s -f");
}
}
Sleep(15000);
}
}
Chcę aby funkcja automat() działała w tle gdyż w przyszłości cichłem dodać możliwość ustawienia kilku godzin przy których komputer będzie się wyłączać a oprócz tego chcę używać innych opcji programu więc nie mogę użyć wylacznik1.join();
Czy jest jakiś sposób aby ten osobny wątek działał bez używania funkcji join();?
Z góry dziękuję za odpowiedź.