Tworzenie i zarządzanie wątkami



Podobne dokumenty
Wielozadaniowość w systemie Microsoft Windows

Programowanie współbieżne i rozproszone. Procesy współbieżne

Plan prezentacji: 1. Czym jest proces? 2. Czym jest wątek? 3. Funkcje do zarządzania wątkami w Win32API. 4. Mechanizmy synchronizacji wątków

Obserwacje kierunku rozwoju współczesnych

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

1. Zasady projektowania aplikacji wielowątkowych. 2. Funkcje wspomagające równoległość przetwarzania. Wykład PR 2012

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

Mariusz Rudnicki PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO CZ.4

Programowanie wielowątkowe. Jarosław Kuchta

Mariusz Rudnicki PROGRAMOWANIE WSPÓŁBIEŻNE I SYSTEMY CZASU RZECZYWISTEGO CZ.4

Systemy wieloprocesorowe. Sprzęt i oprogramowanie wspomagające perspektywa - Windows i Linux Wykład Przetwarzanie równoległe Listopad 2010

Przetwarzanie Rozproszone

Monitory. Jarosław Kuchta

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

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

Obiekty w plikach wykonywalnych, marshaling

Interfejs programowy Windows Sockets 2. Aplikacja klient-serwer TCP Echo

Przetwarzanie Rozproszone

Urządzenia peryferyjne RS-232 oprogramowanie pod WINDOWS. Wykład 3

DYNAMICZNE PRZYDZIELANIE PAMIECI

Programowanie w Sieci Internet. Python: Wątki. Kraków, 12 grudnia 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

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

Semafory. - aktywne oczekiwanie =GRGDWNRZ\PZVSDUFLHPVSU]WRZ\P 6SHFMDOQDLQVWUXNFMDPDV]\QRZDUHDOL]XMFDDWRPRZ\]DSLVL odczyt, np.

Laboratorium Podstawy Przetwarzania Rozproszonego SPRAWOZDANIE z zadania SERWIS KOMPUTEROWY

Jak Windows zarządza pamięcią?

Algorytmy i Struktury Danych.

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

Signals + Threads: Qt vs. Boost

Programowanie obiektowe

Aplikacja wielow tkowa prosty komunikator

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

Projektowanie oprogramowania systemów WĄTKI I SYNCHRONIZACJA

MATERIAŁY DO ZAJĘĆ II

Współbieżność w Javie

Współbieżność w Javie

Algorytmy i Struktury Danych. Anna Paszyńska

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

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

Programowanie Komputerów

PROGRAMOWANIE W ŚRODOWISKU FLASH wykład 2

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Programowanie współbieżne Zadanie 5 - Podstawowe problemy programowania współbieżnego

Wykład 4. Synchronizacja procesów (i wątków) cześć I. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Wprowadzenie do szablonów klas

Semafory. // G - globalna dla wszystkich. // Wada - aktywne oczekiwanie Test_and_Set(Li); exit when Li = 0; end loop sekcja_krytyczna(i); G := 0;

Od wymagań do Javy w mgnieniu oka

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Mechanizmy refleksji w Javie i C# Autor: Aleksander Nałęczyński

Podstawy współbieżności

Język Java wątki (streszczenie)

Język Java wątki (streszczenie)


Pobieranie argumentów wiersza polecenia

Systemy Rozproszone - Ćwiczenie 4

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

Język ludzki kod maszynowy

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

Programowanie równoległe i rozproszone. W1. Wielowątkowość. Krzysztof Banaś Programowanie równoległe i rozproszone 1

ROZDZIAŁ 2. Operatory

WYKŁAD 4 SEMAPHORES (CIĄG DALSZY) Przykład 6 Problem czytelników i pisarzy. Wykład 4 strona 1/24

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

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

Języki i techniki programowania Ćwiczenia 2

Identyfikacje typu na etapie. wykonania (RTTI)

Diagram stanów Laboratorium 9

Kurs programowania. Wykład 8. Wojciech Macyna

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Programowanie w języku C++

Systemy wbudowane. Architektura środowiska SystemC. Wykład 8: SystemC zasady modelowania systemów wbudowanych

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

J. Ułasiewicz Programowanie aplikacji współbieżnych 1

PARADYGMATY PROGRAMOWANIA Wykład 3


DLL Injection. Przejęcie kontroli nad procesem

Konfiguracja po czenia pomi dzy serwerem OPC, a sterownikiem PLC dla sieci Profibus

Wstęp do Programowania 2

Programowanie współbieżne Laboratorium nr 12

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

JAVA W SUPER EXPRESOWEJ PIGUŁCE

synchronizacji procesów

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

synchronizacji procesów

Wykład 4: Klasy i Metody

Wątki w Javie. Piotr Tokarski

Programowanie obiektowe

Składnia C++ Programowanie Obiektowe, część 3 Mateusz Cicheński

Wykład 5. Synchronizacja (część II) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Smarty PHP. Leksykon kieszonkowy

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

Pomoc dla użytkowników systemu asix 6 i 7. Drajwer Bufor. Dok. Nr PLP6021 Wersja:

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne

Droga do DCOM DCOM (1996) Windows clipboard (1987) OLE 1 DDE (1992) OLE 2 (1993) COM (1995) Distributed computing (1980s)

Wstęp do programowania 1

Arrays -II. Arrays. Outline ECE Cal Poly Pomona Electrical & Computer Engineering. Introduction

Wykład 5: Więcej o Klasach i Metodach

//////////////////////////////////////////////////////////// // Kalkulator (prosty) - wersja agregowalna import "unknwn.idl";

Wartości domyślne, szablony funkcji i klas

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Transkrypt:

Tworzenie i zarządzanie wątkami utworzenie wątku HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpthreadattributes, //pointer to thread security attributes DWORD dwstacksize, //initial thread stack size, in bytes LPTHREAD_START_ROUTINE lpstartaddress, //pointer to thread function LPVOID lpparameter, //argument for new thread DWORD dwcreationflags, //creation flags LPDWORD lpthreadid //pointer to returned thread identifier wstrzymanie, wznowienie i przerwanie pracy wątku DWORD SuspendThread(HANDLE hthread DWORD ResumeThread(HANDLE hthread //returned value previous suspend count BOOL TerminateThread( HANDLE hthread, DWORD dwthreadexitcode pobranie informacji o wątku HANDLE GetCurrentThread(VOID DWORD GetCurrentThreadId(VOID BOOL GetExitCodeThread( HANDLE hthread, LPDWORD lpexitcode // handle to the thread // address to receive termination status zamknięcie pracy z wątkiem - sprzątanie BOOL CloseHandle( HANDLE hobject class A {; HANDLE handle1,handle2; long WINAPI MyThreadWithParam(A * parameter){ handle1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MyThread,0,CREATE_SUSPENDED,0 ResumeThread(handle1 A param; Handle2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) MyThreadWithParam,&param,0,0 CloseHandle(handle1 CloseHandle(handle2

Oczekiwanie na zakończenie pracy wątku DWORD WaitForSingleObject( HANDLE hhandle, DWORD dwmilliseconds // handle of object to wait for // time-out interval in milliseconds DWORD WaitForMultipleObjects( DWORD ncount, CONST HANDLE *lphandles, // pointer to the object-handle array BOOL bwaitall, // wait flag DWORD dwmilliseconds // time-out interval in milliseconds // number of handles in the object handle array handle = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MyThread,0,0,0 WaitForSingleObject(handle,1000 CloseHandle HANDLE hthreads[10]; for (int i=0; i<10; i++) { hthreads[i] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MyThread,0,0,0 WaitForMultipleObjects(10,hThreads,TRUE,INFINITE CloseHandle

Synchronizacja pracy wątków Zdarzenia stworzenie [obiektu] zdarzenia HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpeventattributes, // pointer to security attributes BOOL bmanualreset, // flag for manual-reset event BOOL binitialstate, // flag for initial state // pointer to event-object name pobranie, otwarcie [obiektu] zdarzenia HANDLE OpenEvent( DWORD dwdesiredaccess, BOOL binherithandle, // access flag (EVENT_ALL_ACCESS - default) // inherit flag // pointer to event-object name ustawienie, wywołanie zdarzenia BOOL SetEvent( HANDLE hevent BOOL PulseEvent( HANDLE hevent ręczne zresetowanie, zgaszenie zdarzenia BOOL ResetEvent( HANDLE hevent oczekiwanie na zdarzenie DWORD WaitForSingleObject( HANDLE hhandle, DWORD dwmilliseconds HANDLE hevent; WaitForSingleObject(hEvent,INFINITE //wait for event //somewhere else before creating thread hevent = CreateEvent (0, FALSE, FALSE, 0 //somewhere else to launch event SetEvent(hEvent //or PulseEvent(hEvent CloseHandle

Mutexy stworzenie mutexu z określeniem jego posiadania tylko jeden obiekt może posiadać mutex HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpmutexattributes, BOOL binitialowner, // pointer to security attributes // flag for initial ownership // pointer to mutex-object name otwarcie mutexu z określeniem jego posiadania HANDLE OpenMutex( DWORD dwdesiredaccess, BOOL binherithandle, // access flag // inherit flag // pointer to mutex-object name zwolnienie mutexu BOOL ReleaseMutex( HANDLE hevent oczekiwanie na przyznanie (wzięcie w posiadanie) mutexu jeśli jesteś w posiadaniu to funkcja wraca od razu DWORD WaitForSingleObject( HANDLE hhandle, DWORD dwmilliseconds HANDLE hmutex; WaitForSingleObject(hMutex,INFINITE //wait for mutex ownership ReleaseMutex(hMutex //!!! release ownership //somewhere else before creating thread hmutex=createmutex(null, TRUE, name_of_my_mutex //somewhere else to give access to mutex ReleaseMutex(hMutex CloseHandle

Semafory stworzenie semafora i inicjacja HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpsemaphoreattributes, // pointer to security attributes LONG linitialcount, // initial count LONG lmaximumcount, // maximum count otwarcie semafora pobranie uchwytu // pointer to semaphore-object name HANDLE OpenSemaphore( DWORD dwdesiredaccess, BOOL binherithandle, // access flag // inherit flag // pointer to semaphore-object name wejście do sekcji chronionej (dekrementacja semafora o 1) DWORD WaitForSingleObject( HANDLE hhandle, DWORD dwmilliseconds wyjście z sekcji chronionej zwolnienie semafora BOOL ReleaseSemaphore( HANDLE hsemaphore, LONG lreleasecount, LPLONG lppreviouscount // handle of the semaphore object // amount to add to current count // address of previous count HANDLE hsemaphore; WaitForSingleObject(hSemaphore,INFINITE // wait for access ReleaseSemaphore(hSemaphore,1,NULL // release semaphore //somewhere else before creating thread hsemaphore=createsemaphore(null, 0, 1, FILE_EXISTS //somewhere else to give access ReleaseSemaphore(hSemaphore,1,NULL CloseHandle

Sekcje krytyczne inicjalizacja i usunięcie sekcji krytycznej VOID InitializeCriticalSection(LPCRITICAL_SECTION lpcriticalsection VOID DeleteCriticalSection(LPCRITICAL_SECTION lpcriticalsection wejście do i opuszczenie sekcji krytycznej VOID EnterCriticalSection(LPCRITICAL_SECTION lpcriticalsection BOOL TryEnterCriticalSection(LPCRITICAL_SECTION lpcriticalsection VOID LeaveCriticalSection(LPCRITICAL_SECTION lpcriticalsection CRITICAL_SECTION cs; EnterCriticalSection(&cs LeaveCriticalSection(&cs //before creating threads InitializeCriticalSection(&cs //after work DeleteCriticalSection(&cs Oczekujące zegary CreateWaitableTimer(), OpenWaitableTimer(), SetWaitableTimer(), CancelWaitableTimer()