Wątki w MFC. Proces - egzemplarz wykonywania aplikacji Wątek (thread) ścieżka wykonywania w aplikacji

Podobne dokumenty
Programowanie wielowątkowe. Jarosław Kuchta

Programowanie współbieżne. Tworzenie i obsługa semaforów oraz wątków przy użyciu funkcji Windows API.

Wielozadaniowość w systemie Microsoft Windows

Komunikaty w Windows. Jarosław Kuchta

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Helena Boguta, klasa 8W, rok szkolny 2018/2019

Zaawansowane programowanie w C++ (PCP)

Tychy, plan miasta: Skala 1: (Polish Edition)

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1

Karpacz, plan miasta 1:10 000: Panorama Karkonoszy, mapa szlakow turystycznych (Polish Edition)

Lock Manager Deadlock Źródła Jak starczy czasu. Dreadlocks. Konrad Błachnio MIMUW 19 maja 2010

Installation of EuroCert software for qualified electronic signature

Raport bieżący: 44/2018 Data: g. 21:03 Skrócona nazwa emitenta: SERINUS ENERGY plc

Machine Learning for Data Science (CS4786) Lecture11. Random Projections & Canonical Correlation Analysis

Egzamin maturalny z języka angielskiego na poziomie dwujęzycznym Rozmowa wstępna (wyłącznie dla egzaminującego)

Pobieranie argumentów wiersza polecenia

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Machine Learning for Data Science (CS4786) Lecture 11. Spectral Embedding + Clustering

Zakopane, plan miasta: Skala ok. 1: = City map (Polish Edition)

Instrukcja obsługi User s manual

POLITYKA PRYWATNOŚCI / PRIVACY POLICY

Machine Learning for Data Science (CS4786) Lecture 24. Differential Privacy and Re-useable Holdout

Emilka szuka swojej gwiazdy / Emily Climbs (Emily, #2)

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian

FORMULARZ REKLAMACJI Complaint Form

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

MaPlan Sp. z O.O. Click here if your download doesn"t start automatically

Współbieżność w środowisku Java

Weronika Mysliwiec, klasa 8W, rok szkolny 2018/2019

Wojewodztwo Koszalinskie: Obiekty i walory krajoznawcze (Inwentaryzacja krajoznawcza Polski) (Polish Edition)

Kurs programowania. Wykład 8. Wojciech Macyna

SSW1.1, HFW Fry #20, Zeno #25 Benchmark: Qtr.1. Fry #65, Zeno #67. like

Język Java wątki (streszczenie)

Java. Programowanie Obiektowe Mateusz Cicheński

4 bity zarezerwowane dla przyszłych zastosowań 11 bitów określających źródło błędu 16 bitów określających rodzaj błędu.

Rachunek lambda, zima

Wojewodztwo Koszalinskie: Obiekty i walory krajoznawcze (Inwentaryzacja krajoznawcza Polski) (Polish Edition)

INSTRUKCJE JAK AKTYWOWAĆ SWOJE KONTO PAYLUTION

Zegary. Zegary (timers) umożliwiają cykliczne w danych odstępach czasu wykonać określone operacje.

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian

Katowice, plan miasta: Skala 1: = City map = Stadtplan (Polish Edition)

Programowanie komputerów

SubVersion. Piotr Mikulski. SubVersion. P. Mikulski. Co to jest subversion? Zalety SubVersion. Wady SubVersion. Inne różnice SubVersion i CVS

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Podstawa prawna: Art. 70 pkt 1 Ustawy o ofercie - nabycie lub zbycie znacznego pakietu akcji

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

Wojewodztwo Koszalinskie: Obiekty i walory krajoznawcze (Inwentaryzacja krajoznawcza Polski) (Polish Edition)

Stargard Szczecinski i okolice (Polish Edition)

Blow-Up: Photographs in the Time of Tumult; Black and White Photography Festival Zakopane Warszawa 2002 / Powiekszenie: Fotografie w czasach zgielku

Aplikacja Sieciowa wątki po stronie klienta

Zdecyduj: Czy to jest rzeczywiście prześladowanie? Czasem coś WYDAJE SIĘ złośliwe, ale wcale takie nie jest.

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Instrukcja konfiguracji usługi Wirtualnej Sieci Prywatnej w systemie Mac OSX

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Czy mogę podjąć gotówkę w [nazwa kraju] bez dodatkowych opłat? Asking whether there are commission fees when you withdraw money in a certain country

deep learning for NLP (5 lectures)

Wojewodztwo Koszalinskie: Obiekty i walory krajoznawcze (Inwentaryzacja krajoznawcza Polski) (Polish Edition)

DOI: / /32/37

Angielski bezpłatne ćwiczenia - gramatyka i słownictwo. Ćwiczenie 6

Revenue Maximization. Sept. 25, 2018

Tworzenie i zarządzanie wątkami

OpenPoland.net API Documentation

Extraclass. Football Men. Season 2009/10 - Autumn round

OSI Transport Layer. Network Fundamentals Chapter 4. Version Cisco Systems, Inc. All rights reserved. Cisco Public 1

Wybrzeze Baltyku, mapa turystyczna 1: (Polish Edition)

Ćwiczenia 2 IBM DB2 Data Studio

Miedzy legenda a historia: Szlakiem piastowskim z Poznania do Gniezna (Biblioteka Kroniki Wielkopolski) (Polish Edition)

Wroclaw, plan nowy: Nowe ulice, 1:22500, sygnalizacja swietlna, wysokosc wiaduktow : Debica = City plan (Polish Edition)

EGZAMIN MATURALNY 2011 JĘZYK ANGIELSKI

Cele. Definiowanie wyzwalaczy

Pytania cudzoziemców zwiedzających Kamienicę Szołayskich;

Rozpoznawanie twarzy metodą PCA Michał Bereta 1. Testowanie statystycznej istotności różnic między jakością klasyfikatorów

AN EVOLUTION PROCESS FOR SERVICE- ORIENTED SYSTEMS

LEARNING AGREEMENT FOR STUDIES

HAPPY ANIMALS L01 HAPPY ANIMALS L03 HAPPY ANIMALS L05 HAPPY ANIMALS L07

Zajęcia z języka angielskiego TELC Gimnazjum Scenariusz lekcji Prowadzący: Jarosław Gołębiewski Temat: Czas Present Perfect - wprowadzenie

HAPPY ANIMALS L02 HAPPY ANIMALS L04 HAPPY ANIMALS L06 HAPPY ANIMALS L08

1. Tworzenie nowego projektu.

Miedzy legenda a historia: Szlakiem piastowskim z Poznania do Gniezna (Biblioteka Kroniki Wielkopolski) (Polish Edition)

Case study - bankomat. Piotr Ciskowski

Dolny Slask 1: , mapa turystycznosamochodowa: Plan Wroclawia (Polish Edition)

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian

Why do I need a CSIRT?

ARKUSZ PRÓBNEJ MATURY Z OPERONEM

Agnieszka Lasota Sketches/ Szkice mob

Karpacz, plan miasta 1:10 000: Panorama Karkonoszy, mapa szlakow turystycznych (Polish Edition)

Przetwarzanie równoległe i współbieżne

Wątki (Threads) Potrzeby. Przetwarzanie równoległe i współbieŝne. Cechy programowania wątkowego. Concurrent programming is like

Signals + Threads: Qt vs. Boost

ANKIETA ŚWIAT BAJEK MOJEGO DZIECKA

Hard-Margin Support Vector Machines

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

Patients price acceptance SELECTED FINDINGS

ERASMUS + : Trail of extinct and active volcanoes, earthquakes through Europe. SURVEY TO STUDENTS.

PROMOTION - Flexible Ducts and Accessories - FLX-REKU P13.1/2013

Aktualizacja Oprogramowania Firmowego (Fleszowanie) Microprocessor Firmware Upgrade (Firmware downloading)

Programowanie na poziomie sprzętu. Programowanie w Windows API

Transkrypt:

Wątki

Wątki w MFC Proces - egzemplarz wykonywania aplikacji Wątek (thread) ścieżka wykonywania w aplikacji Jest co najmniej jeden primary thread Można tworzyć dodatkowe Klasą bazową dla wątków jest CWinThread Są dwa rodzaje: user interface worker

Worker thread Służą do obsługi zadań w tle, tak, aby użytkownik nie musiał czekać aby nie był blokowany interfejs Nie jest konieczne dziedziczenie po CWinThread Wątek jest konstruowany w oparciu o controlling function : UINT MyControllingFunction( LPVOID pparam ); Do rozpoczęcia wątku służy funkcja AfxBeginThread

AfxBeginThread CWinThread* AfxBeginThread( AFX_THREADPROC pfnthreadproc, LPVOID pparam, int npriority = THREAD_PRIORITY_NORMAL, UINT nstacksize = 0, DWORD dwcreateflags = 0, LPSECURITY_ATTRIBUTES lpsecurityattrs = NULL);

AfxBeginThread pfnthreadproc - wskaźnik do funkcji wątku pparam parametr który ma być przekazany do funkcji wątku npriority priorytet. 0 dla priorytetu jak wątku tworzącego nstacksize rozmiar stosu. 0 dla rozmiaru jak wątku tworzącego dwcreateflags - 0 watek rusza natychmiast po utworzeniu, CREATE_SUSPENDED nie rusza aż do wywołania ResumeThread Wartość zwracana wskaźnik do nowego wątku

UINT MyThreadProc( LPVOID pparam ) { CMyObject* pobject = (CMyObject*)pParam; if (pobject == NULL) return 1; // not valid // do something with 'pobject' } return 0; // thread completed successfully // inside a different function in the program... pnewobject = new CMyObject; AfxBeginThread(MyThreadProc, pnewobject);

CWinThread m_hthread uchwyt wątku m_nthreadid ID wątku GetMainWnd wskaźnik do okienka przypisanego do wątku GetThreadPriority, SetThreadPriority priorytet wątku PostThreadMessage przesłanie wiadomości do wątku ResumeThread uruchomienie wątku SuspendThread zawieszenie wątku

CWinThread OnIdle obsługa czasu wolnego PreTranslateMessage, ProcessMessageFilter, Run przetwarzanie wiadomości przez wątek operator HANDLE konwersja na typ HANDLE

Kończenie wątku Wątek powinien sie zakończyć kulturalnie Możliwe są dwie sytuacje kulturalnego zakończenia: Nie ma nic więcej do zrobienia Otrzymano polecenie zakończenia od innego wątku W obu przypadkach można użyć: return AfxEndThread(UINT nexitcode, BOOL bdelete = TRUE); Wątek może po sobie posprzątać Aby zadziałało, wątek musi być sprawny

Kończenie wątku - niekulturalne BOOL TerminateThread(HANDLE hthread, DWORD dwexitcode); Umożliwia zakończenie wątku z innego wątku Nie pozwala kończącemu się wątkowi na posprzątanie Używać tylko w ostateczności!

Komunikacja i synchronizacja Wątki muszą się komunikować aby: Wymieniać dane Wydawać polecenia W MFC wątek może pracować tylko na tych obiektach MFC, które utworzył Komunikować można się np. poprzez: Windows messages (PostMessage, PostThreadMessage) Obiekty nie-mfc

PostMessage, PostThreadMessage BOOL PostMessage(HWND hwnd, UINT Msg, WPARAM wparam, LPARAM lparam); BOOL PostThreadMessage(DWORD idthread, UINT Msg, WPARAM wparam, LPARAM lparam);

Obsługiwanie wiadomości Wiadomości definiowane przez użytkownika mają kod od WM_USER do 0x7FFF Aby je obsłużyć, należy zastosować makro ON_MESSAGE(message, memberfxn) ON_THREAD_MESSAGE(message, memberfxn) Funkcje obsługujące wiadomość to odpowiednio afx_msg LRESULT memberfxn( WPARAM, LPARAM ) afx_msg void memberfxn( WPARAM, LPARAM )

Why concurrency is a problem? Concurrency and asynchronous processing is typical in real world It can pose a problem when many entities (people, machines, processing threads) use (share) the same resource (or a limited number of resources) A trivial example is that of an elevator the cabin is single resource that many people want to use. The problem is how to control the elevator to minimise waiting time?

Why concurrency is a problem? The elevator ' scheduling control is not crucial, at worst improper algorithm may result in long waiting times There are situations where handling concurrency is crucial for correct behaviour of the system

Why concurrency is a problem? Unwanted results of concurrency include: Race conditions Resource starvation Deadlocks

Race conditions When race conditions occur, the result of the system behaviour may be unexpected and is dependent on the sequence of other events Race conditions were first described in electronics (logic circuits), when parallelism is typical An example of race conditions may be poorly implemented ATM

ATM case Lets imagine the ATM operation is following Authorise client Get account balance Get client request Update account Dispense cash

ATM case This can translate to following situation: Authorisation OK +2s Balance is 1000 +10s Client requested 800, 800<1000 +12s Account updated by -800, 200 left +14s Cash dispensed Everything worked fine

ATM case Now, lets imagine that there are two cards attached to the same account (wife and husband, corporate account etc.) Two persons at nearly the same time want to withdraw money. What may happen?

ATM case +1s Client 1 Client 2 Authorisation OK Authorisation OK +2s Balance is 1000 +3s Balance is 1000 +5s Client requested 800, 800<1000 +7s +9s Account updated by -800, 200 left Cash dispensed +10s Client requested 800, 800<1000 +12s +14s Account updated by -800, -600 left Cash dispensed

Race conditions Race conditions may be resolved by resource locking +2s +3s Client 1 Client 2 Balance is 1000, lock account account locked - cannot proceed +10s Client requested 800, 800<1000 +12s +14s Account updated by -800, 200 left, unlock account Cash dispensed

Resource starvation The process (person, system) is denied the resource it needs, because other process is not freeing them

Deadlock Deadlock occurs when a number (at least 2) processes are waiting for the other to finish (or release resources) and therefore none progresses This can be illustrated by dining philosophers problem (invented by Edsger Dijkstra)

Dining philosophers problem The philosopher is either thinking, or eating The philosophers do not talk (communicate) The philosopher can pick a fork to her/his right or left, one at a time The philosopher needs both forks to eat

Zasady dostępu do obiektów Dostęp do zmiennych o długości odpowiadającej słowu procesora jest atomowy Klasy MFC nie są thread-safe na poziomie obiektów (są na poziomie klas) Do synchronizacji (kontroli dostępu) można używać klas CSemaphore, CMutex, CCriticalSection, CEvent Klasy CMultiLock i CSingleLock służą do otrymania dostępu

Wybór klasy synchronizującej Czy aplikacja musi czekać na zdarzenie przed dostępem do zasobu (np. na otrzymanie danych z portu)? Jeśli tak, należy użyć CEvent Czy więcej niż jeden wątek aplikacji może w danej chwili korzystać z zasobu? Jeśli tak, należy użyć CSemaphore Czy zasobu używa więcej niż jedna aplikacja? Jeśli tak, należy użyć CMutex, jeśli nie - CCriticalSection

CCriticalSection Szybkie Dostęp tylko jednego wątku w danej chwili Brak wsparcia dla wielu procesów Użycie: Zrobić CCriticalSection Zrobić CSingleLock na CCriticalSection Sprawdzić czy sekcja jest dostępna przez IsLocked i/lub przejąć sekcję przez Lock Po skończeniu pracy z sekcją użyć Unlock lub zniszczyć (lub pozwolić aby się zniszczył) CSingleLock

CSemaphore Dostęp kilku wątków jednocześnie Brak wsparcia dla wielu procesów Użycie jak CCriticalSection