29
1 dr Artur Bartoszewski -Wizualne systemy programowania , sem. III- WYKŁAD Wykład 11 Wątki, Timer Wizualne systemy programowania

Programowanie obiektowe w c i c++ - Artur Bartoszewski · 2020. 10. 16. · dr Artur Bartoszewski -Programowanie obiektowe , sem. 1I WYKŁAD Użyte w tej prezentacji tabelki pochodzą

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

  • 1 dr Artur Bartoszewski -Wizualne systemy programowania , sem. III- WYKŁAD

    Wykład 11 Wątki,

    Timer

    Wizualne systemy programowania

  • 2 dr Artur Bartoszewski -Wizualne systemy programowania , sem. III- WYKŁAD

    Wątki – programowanie współbieżne

    Wizualne systemy programowania

  • 3

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Wątki – klasa BackgroundWorker – umożliwiają delegowanie pewnych

    operacji do wątków pracujących współbieżnie (równolegle) z główna

    aplikacją.

    Za ich pomocą pewne operacje mogą być wykonywane w tle,

    Uruchomienie wątku:

    backgroundWorker1.WorkerReportsProgress = true;

    backgroundWorker1.WorkerSupportsCancellation = true;

    backgroundWorker1.RunWorkerAsync();

  • 4

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Należy pamiętać o dodaniu komponentu BacgroundWorker do

    projektu.

    Utworzony zostanie

    instancja tej klasy –

    w naszym

    przykładzie - obiekt

    bacgroundWorker1

  • 5

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Klasa BackgroundWorker posiada zdarzenia:

    DoWork – w którym umieszczamy operacje do wykonania w tle

    RunWorkerCompleted – które wywoływane jest po zakończeniu pracy

    wątku.

    ProgressChanged – który wykorzystać można do raportowania

    postępów wątku do programu głównego (pasek postępu)

  • 6

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    DoWork – w którym umieszczamy operacje do wykonania w tle.

    Uwaga: z wnętrza metody obsługi zdarzenia DuWork nie mamy

    możliwości sięgnięcia do kontrolek okna głównego programu.

    Metoda DoWork zwraca wartość za pośrednictwem zmiennej „e”

    Np.: e.Result = wynik_obliczen;

  • 7

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Metoda DuWork może otrzymać parametry „zapakowane” w argument „e”

    typu DoWorkEventARGS.

    Np.:

    Wywołanie wątku z argumentem:

    backgroundWorker1.RunWorkerAsync(50);

    Odebranie argumentu w metodzie DoWork:

    int a = (int)e.Argument;

  • 8

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    ProgressChanged – metoda, którą wykorzystać można do

    raportowania postępów wątku do programu głównego (pasek postępu)

    Metoda ProgressChanged musi być wywoływana cykliczne wewnątrz

    metody DoWork() z parametrem mówiącym o postępie wątku.

    backgroundWorker1.ReportProgress (i);

    Z wewnątrz metody ProgressChanged możemy sięgnąć do kontrolek

    procesu głównego.

    Np.: progressBar1.PerformStep();

    lub

    progressBar1.Value = e.ProgressPercentage;

  • 9

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Wstrzymanie pracy wątku:

    Thread.Sleep (czas);

    czas – podany w milisekundach

    Dodać należy przestrzeń nazw: using System.Threading;

  • 10

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Przerywanie wątku

    Do przerwania pracy wątku służy metoda CancelAsync()

    Np.: backgroundWorker1.CancelAsync();

    UWAGA: nie wymusza ona bezwarunkowego przerwania wątku –

    stanowi tylko informację, że wątek powinien zakończyć pracę. Sposób

    jego zakończenia należy zdefiniować wewnątrz wątku.

  • 11

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Oprogramowanie przerwania wątku:

    W metodzie DoWork dodajemy reakcję na własność

    CancellationPendin (true oznacza żądanie przerwania wątku)

    if (backgroundWorker1.CancellationPending == true) {

    //akcja wątku

    } else {

    e.Cancel = true;

    break;

    }

    W takim przypadku ustawiamy pole Cancel zdarzenia „e” na true

    (potwierdzamy zamknięcie) i przerywany pracę metody DoWork

    (polecenie break)

  • 12

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Oprogramowanie przerwania wątku:

    W metodzie RunWorkerComleted, która kończy pracę wątku.

    if (e.Cancelled == true) {

    richTextBox1.Text = "Błąd: wątek został zatrzymany";

    } else {

    // normalne zakończenie pracy wątku

    }

    Jeżeli pole Canceled zdarzenia „e” jest równe true (wątek został

    zamknięty) reagujemy na ten fakt – np. wypisując komunikat o

    błędzie. W przeciwnym razie kończmy wątek normalnie

  • 13

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    PRZYKŁAD:

    Generowanie tablicy stringów w

    osobnym wątku (sztucznie

    spowolnione)

  • 14

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Uruchamianie wątku – po kliknięciu przycisku „Start”

  • 15

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Zdarzenie DoWork – wykonywane w

    trakcie pracy wątku – jego główne

    zadania

  • 16

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Zdarzenie RunWorkerCompleted –

    wykonywane po zakończeniu wątku –

    zwraca wygenerowaną tablice do pola

    tekstowego

  • 17

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Zdarzenie ProgressChanged – sterowanie paskiem postępu

    Zdarzenie to wywoływane jest w DoWork:

    backgroundWorker1.ReportProgress(i + 1);

  • 18

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Przerwanie wątku

    Wymaga zmian w DoWork i

    RunWorkerCompleted

    Patrz poniżej

  • 19

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Zdarzenie DoWork –

    wykonywane w trakcie pracy

    wątku – jego główne zadania

  • 20

    Wątki

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Zdarzenie RunWorkerCompleted –

    wykonywane po zakończeniu wątku –

    zwraca wygenerowaną tablice do pola

    tekstowego

  • 21 dr Artur Bartoszewski -Wizualne systemy programowania , sem. III- WYKŁAD

    Timer

    Wizualne systemy programowania

    Timer jest wątkiem

    pracującym w tle który

    co pewien czas

    wywołuje jakąś akcję

  • 22

    Timer

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Rozpocząć należy od dodania komponentu Timer do projektu.

    Utworzony zostanie

    instancja tej klasy –

    w naszym

    przykładzie - obiekt

    timer1

  • 23

    Timer

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Timer posiada metodę Tick która wywoływana jest co określony

    interwał czasu.

    Oprogramowanie timera to

    właściwie oprogramowanie

    tej metody

  • 24

    Timer

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Ustawienia timera:

    • Enabled – timer włączony / zatrzymany

    • Interval – odstęp pomiędzy wywołaniami

    metody Tick – w milisekundach)

    Z poziomu kodu:

    • Uruchomienie timera

    • Zmiana interwału

  • 25

    Timer

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    PRZYKŁAD:

    Sterowanie paskiem postępu

    za pomocą timera, z regulacją

    prędkości.

  • 26

    Timer

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Uruchomienie i zatrzymanie Timera

  • 27

    Timer

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Metoda Tick – zwiększa wartość kontrolki

    progressBar

    (pilnuje też, żeby nie nastąpiło jej

    przepełnienie)

  • 28

    Timer

    Programowanie wizualne – Windows Forms

    dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD

    Sterowanie „prędkością” timera – czyli

    ostępami pomiędzy wykonaniami metody

    Tick

  • 29

    Literatura:

    dr Artur Bartoszewski - Programowanie obiektowe , sem. 1I - WYKŁAD

    Użyte w tej prezentacji tabelki pochodzą z książki: Visual Studio 2013. Podręcznik programowania w C# z

    zadaniami Autor: Matulewski Jacek, Helion

    https://www.google.pl/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&cad=rja&uact=8&ved=2ahUKEwjmo9SKyPfdAhVxsosKHdpVCj0QjRx6BAgBEAU&url=https://helion.pl/ksiazki/microsoft-visual-studio-2012-programowanie-w-c-dawid-farbaniec,vs12pc.htm&psig=AOvVaw3zpLnPQDVamj_KSB_3RJzC&ust=1539112789582844