INFOPedia : LSOw32api

HomePage :: Categorie :: Indice :: Ultime modifiche :: Ultimi commenti :: Login/Registrazione
La versione più recente è stata modificata il 2007-05-29 10:30:28 da MarKuS

Aggiunzioni:

CreateThread

ResumeThread

SuspendThread

TerminateThread

Le funzioni WaitFor_ sono funzioni polimorfe che bloccano il thread corrente fino al verificarsi della condizione specificata o della scadenza del termine. Il loro comportamento cambia a seconda del tipo di oggetto che viene loro passato
- Mutex & Semafori: acquisizione (lock)
- Thread (terminazione)

WaitForSingleObject

Attende il verificarsi di un evento.

WaitForMultipleObjects



Omissioni:

CreateThread

ResumeThread

SuspendThread

TerminateThread

Le funzioni WaitFor_ bloccano il thread corrente fino al verificarsi della condizione specificata o della scadenza del termine.

WaitForSingleObject

Attende un evento (sui Thread attende la loro terminazione).

WaitForMultipleObjects





Modificato il 2007-05-29 10:23:15 da MarKuS

Aggiunzioni:

Mutex & Semafori

CreateMutex

Crea un oggetto mutex, o vi accede.

ReleaseMutex

Rilascia un mutex(up).
%%(c)BOOL WINAPI ReleaseMutex(
HANDLE hMutex

CreateSemaphore

ReleaseSemaphore

Funzioni di attesa

Le funzioni WaitFor_ bloccano il thread corrente fino al verificarsi della condizione specificata o della scadenza del termine.


Omissioni:

Semafori

CreateSemaphore

ReleaseSemaphore

hSemaphore
Lo handle al semaforo.



Modificato il 2007-05-29 10:04:12 da MarKuS

Aggiunzioni:
Una rapida nota sulle convenzioni osservate per alcuni tipi di dati e nomi di variabili. Le API Win32 usano la cosiddetta "Notazione Ungherese" per la denominazione delle variabili. Questa notazione richiede che il nome della variabile sia preceduto da un prefisso che ne indica il tipo, in modo tale da rendere immediata la comprensione del codice.

Semafori

CreateSemaphore

Crea un oggetto semaforo, o vi accede.
HANDLE WINAPI CreateSemaphore(
  LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
  LONG lInitialCount,
  LONG lMaximumCount,
  LPCTSTR lpName
lpSemaphoreAttributes
        Serve ad impostare politiche di sicurezza. Messo a NULL, utilizza il default. Leggete MSDN per saperne di più
lInitialCount
        Il valore iniziale del semaforo. Dev'essere >= 0 e <= lMaximumCount
lMaximumCount
        Il valore massimo che il semaforo può assumere. Dev'
essere >0.
lpName
        Il nome assegnato al semaforo. NULL lascia il semaforo anonimo (va benissimo anche così).
====""ReleaseSemaphore""====
//Incrementa il semaforo (up)//
 
(c)BOOL WINAPI ReleaseSemaphore(
HANDLE hSemaphore,
LONG lReleaseCount,
LPLONG lpPreviousCount
hSemaphore
Lo handle al semaforo.
lReleaseCount
La quantità di cui incrementare il semaforo. Il valore dev'essere >0. Se il semaforo supera i limiti impostati in occasione della sua creazione, l'incremento non viene effettuato e la funzione restituisce FALSE.
lpPreviousCount
Puntatore ad una variabile che riceve il precedente valore del semaforo. Se il parametro è NULL il valore precedente non viene restituito.
Return Value
Restituisce zero in caso di errore. Per ottenere maggiori informazioni, chiamate GetLastError


Omissioni:
Una rapida nota sulle convenzioni osservate per alcuni tipi di dati e nomi di variabili. Le API Win32 usano la cosiddetta "Notazione Ungherese" per la denominazione delle variabili. Questa notazione richiede che il nome della variabile sia preceduto da un prefisso che ne indica il tipo, in modo tale da rendere immediata la comprensione del codice.



Modificato il 2007-04-21 00:01:46 da DenteDiLupo

Aggiunzioni:

CreateThread

ResumeThread

WaitForSingleObject

WaitForMultipleObjects

TerminateThread



Omissioni:

CreateThread

ResumeThread

WaitForSingleObject

WaitForMultipleObjects

TerminateThread





Modificato il 2007-04-21 00:00:56 da DenteDiLupo

Aggiunzioni:

SuspendThread



Omissioni:

SuspendThread





Modificato il 2007-04-20 05:24:10 da MarKuS

Aggiunzioni:

TerminateThread

Uccide un thread senza pietà. Non c'è motivo di usarla.
«TerminateThread è una funzione pericolosa da utilizzare solo nei casi più estremi.» (MSDN)
BOOL WINAPI TerminateThread(
HANDLE hThread,
DWORD dwExitCode
dwExitCode
Codice di ritorno del Thread terminato



Modificato il 2007-04-20 04:51:37 da MarKuS

Aggiunzioni:

WaitForSingleObject



Omissioni:

WaitForSingleObject





Modificato il 2007-04-20 04:49:44 da MarKuS

Aggiunzioni:
se create più di un thread, ad es. in un ciclo, ricordatevi che non potete HANDLE hThreads[N_THREADS];
}

ResumeThread

Decrementa il numero di sospensioni del thread. Quando il numero di sospensioni è zero, il thread riprende

SuspendThread

Sospende il thread (aumenta il numero di sospensioni se il thread è già sospeso)

WaitForSingleObject

Attende un evento (sui Thread attende la loro terminazione).

WaitForMultipleObjects

Attende un'insieme di eventi (uno o tutti).



Omissioni:
se create più di un thread, ad es. in un ciclo, ricordatevi che non potete
HANDLE hThreads[N_THREADS];
}
ResumeThread - Decrementa il numero di sospensioni del thread. Quando il numero di sospensioni è zero, il thread riprende.
);
SuspendThread - Sospende il thread (aumenta il numero di sospensioni se il thread è già sospeso)
);
WaitForSingleObject - Attende un evento (sui Thread attende la loro terminazione)
);
Parametri:
WaitForMultipleObjects - Attende un'insieme di eventi (uno o tutti)
);
Parametri:




Modificato il 2007-04-20 04:44:40 da MarKuS

Aggiunzioni:
%%(c)/* (NdM - Nota di MarKuS)
se create più di un thread, ad es. in un ciclo, ricordatevi che non potete
fare affidamento sull'ordine di esecuzione dei diversi thread. */
HANDLE hThreads[N_THREADS];
for (i=0;i<N_THREADS; i) {
hThreads[i] = CreateThread( NULL, 0, my_func, &i, 0, NULL ); /* NO! */
}
/* i verrà modificato mille volte prima che il primo dei thread creati si svegli ! */


Omissioni:
%%(c)(NdM - Nota di MarKuS)
se create più di un thread, ad es. in un ciclo, ricordatevi che non potete fare affidamento sull'ordine
di esecuzione dei diversi thread.
for (i=0;i<N_THREADS; i) {




La versione più vecchia di questa pagina è stata modificata il 2007-04-20 04:38:49 da MarKuS []
Vista della pagina:

Piccola Guida alle API Windows

(Quello che serve per il corso)

Le informazioni contenute in questa pagina provengono dal sito di MSDN condite da sperimentazioni personali e costituiscono una libera espressione di opinioni personali. Se vi sembrano striminzite, bene! Quello che volevo fare era proprio andare all'essenziale. Per maggiori informazioni va benissimo MSDN. Se credete di trovare errori ditelo pure, ne discuteremo insieme.

Qualche "dritta" per leggere i prototipi.


Una rapida nota sulle convenzioni osservate per alcuni tipi di dati e nomi di variabili. Le API Win32 usano la cosiddetta "Notazione Ungherese" per la denominazione delle variabili. Questa notazione richiede che il nome della variabile sia preceduto da un prefisso che ne indica il tipo, in modo tale da rendere immediata la comprensione del codice.

I tipi di windows


Oltre ai tipi ANSI su Windows vengono definiti molti altri tipi di dato, molto usati nella libreria di sistema, quindi é bene saperli usare.

Tipi interi senza segno

BYTE 8 bit (0 - 255)
WORD 16 bit (0 - 65535)
DWORD 32 bit (0 - 4294967295)
DWORDLONG 64 bit (0 - 18446744073709551615)

HANDLE - identificativo di una risorsa (Thread, Mutex o quant'altro...). E' un intero, ma fate finta di non saperlo. Non fate aritmetica con variabili di questo tipo, davvero.

Puntatori

P<tipo>, LP<tipo>: Puntatore a <tipo> [32 bit] (es. LPWORD, LPCHAR, LPVOID). La differenza tra P ed LP aveva senso nei sistemi a 16 bit (win 3.1). Adesso sono la stessa cosa. Usate LP.

Gestione dei Thread (si legge thréd, con la "e", non thrid con la "i")


CreateThread

Crea un nuovo thread.

Restituisce un HANDLE al nuovo thread. Conservatelo con cura: tutte le chiamate di sistema che manipolano i thread necessitano di questo valore. In ogni funzione troverete sempre un parametro HANDLE hThread, che vuol dire sempre la stessa cosa: su quale thread deve operare la funzione che state invocando.

HANDLE CreateThread(
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  SIZE_T dwStackSize,
  LPTHREAD_START_ROUTINE lpStartAddress,
  LPVOID lpParameter,
  DWORD dwCreationFlags,
  LPDWORD lpThreadId
);


lpThreadAttributes
puntatore a una struttura di descrittori di sicurezza. Fondamentamentalmente a noi non serve. (NULL)

dwStackSize
dimensione iniziale dello stack. Usate 0 per il default.

lpstartAddress
la funzione che deve girare nel Thread separato. Questa va dichiarata "DWORD my_func( LPVOID param )", param riceve il valore lpParameter (vedi sotto)

lpParameter
puntatore ai dati passati all funzione nel nuovo thread

dwCreationFlag
FLAG di creazione del thread
+ SUSPENDED, il thread non si avvia automaticamente dopo la creazione (vedi ResumeThread, SuspendThread)

0 default

lpThreadId
Sostanzialmente inutile (NULL)

(NdM - Nota di MarKuS)
    se create più di un thread, ad es. in un ciclo, ricordatevi che **non** potete fare affidamento sull'ordine
    di esecuzione dei diversi thread.
   
        for (i=0;i<N_THREADS; i++) {

ResumeThread - Decrementa il numero di sospensioni del thread. Quando il numero di sospensioni è zero, il thread riprende.

DWORD WINAPI ResumeThread(
HANDLE hThread
);

SuspendThread - Sospende il thread (aumenta il numero di sospensioni se il thread è già sospeso)

DWORD WINAPI SuspendThread(
HANDLE hThread
);

WaitForSingleObject - Attende un evento (sui Thread attende la loro terminazione)

DWORD WINAPI WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds
);

Parametri:
dwMilliseconds
Quanto a lungo attendere l'evento prima di proseguire. Va benissimo INFINITE("aspetta e basta!")

WaitForMultipleObjects - Attende un'insieme di eventi (uno o tutti)

DWORD WINAPI WaitForMultipleObjects(
DWORD nCount,
const HANDLE* lpHandles,
BOOL bWaitAll,
DWORD dwMilliseconds
);

Parametri:

nCount
Numero degli eventi descritti

lpHandles
Array degli descrittori (handle degli eventi)

bWaitAll
Uno solo o tutti?

dwMilliseconds
Quanto a lungo attendere l'evento prima di proseguire. Va benissimo INFINITE("aspetta e basta!")










La pagina è stata generata in 0.2355 secondi