Zapausowanie i zatrzymanie uruchomionej funkcji.

0

Witam, nie jestem pewien czy pewne rozwiązanie mojego problemu będzie dobre. Otóż chciałbym zaimplementować pausowanie i zatrzymywanie funkcji runRequest: https://github.com/arkadiusz97/UniversalBot/blob/master/programManager.cpp Odbywałoby się to poprzez wciśnięcie odpowiedniego przycisku w głównym oknie. Pomyślałem, że zapausowanie funkcji obyłoby się poprzez uruchomienie QEventLoop. Zatrzymanie działania funkcji odbyłoby się poprzez zmianę wartości określonej zmiennej bool oraz poprzez ifa, który z każdym obiegiem pętli sprawdza wartość tej zmiennej. Czy takie rozwiązanie będzie poprawne? Bo jak szukałem go w google, były przykłady z użyciem osobnych wątków. A to moje rozwiązanie miałoby działać tylko na jednym wątku.

1

W Qt podstawowym narzędziem są sygnały i sloty.
Nie są ci potrzebne ani wątki ani dodatkowy QEventLoop, wystarczy poprawne wykorzystanie sygnałów od QNetworkAccessManager.

0

@MarekR22: Czy użycie sygnałów od QNetworkAccessManager wystarczy, aby zakończyć działanie całej metody bool programManager::runRequest?

1

NIE!
Po prostu masz rozbić runRequest na mniejsze funkcje (sloty).
Ty za dużo chcesz zrobić na raz w jednej funkcji i stąd cały kłopot.

0

@MarekR22: Nie jestem w 100% pewien co dokładnie masz na myśli. Rozumiem, że tą "dużą" funkcję mam podzielić tak, aby jedna z mniejszych wykonała jedno zapytanie? I po wciśnięciu przycisku stop, sygnał finished z QNetworkAccessManager zostałby powiązany z funkcją, która by wywoływała tą mniejszą?

1

Nie mam dziś czasu ci tego przepisać.
Zawsze dziel kod na mniejsze metody/funkcję (bardzo dobra praktyka).
Będziesz wtedy w stanie dopisać logikę, która chwilowo wstrzyma przetwarzanie kolejnych wydarzeń (sygnałów).
Zrobienie tego w ramach tej skomplikowanej synchronicznej funkcji jest trudne i wymaga większej świadomości jak działa Qt.

1 użytkowników online, w tym zalogowanych: 0, gości: 1