Traduca

Translate to EnglishÜbersetzen Sie zum Deutsch/GermanΜεταφράστε στα ελληνικά/GreekПереведите к русскому/RussianOversetter til Norsk/NorwegianÖversätta till Svensk/Swedishहिन्दी अनुवाद करने के लिए/Hindi
Tradueix al català/CatalanTulkot uz latviešu/LatvianPreložiť do slovenčiny/SlovakVertaal aan het Nederlands/Dutchترجمة الى العربية/ArabicTraduzca al Español/SpanishTraduisez au Français/French
Traduca ad Italiano/ItalianTraduza ao Português/Portuguese日本語に翻訳しなさい /Japanese한국어에게 번역하십시오/Korean中文翻译/Chinese Simplified中文翻译/Chinese TraditionalПереклад на українську/Ukrainian
Immagine di sviluppo di applicazioni della radio del Android
Immagine di XSLT 2.0 e di riferimento del programmatore di XPath 2.0 (programmatore a programmatore)
Immagine dei sistemi operativi moderni (terza edizione)
Immagine di sviluppo del nocciolo di Linux (terza edizione)

WaitForSingleObject Porting a Linux - parte 2

In mio ultimo alberino ho discusso l'uso di WaitForSingleObject rispetto ai mutexes ed ai sensi possibili realizzare la funzionalità equivalente quando porting tale codice a GNU/Linux.  In questo alberino descriverò l'uso di questo api con gli oggetti di evento in Microsoft Windows e suggerirò i sensi possibili di invio del tale codice a GNU/Linux o ad Unix.

In primo luogo, una certa priorità bassa sugli oggetti di evento.  Un oggetto di evento è appena un altro tipo di oggetto dello spedizioniere del nocciolo di Windows.  Da una codificazione prespective, un oggetto di evento è un oggetto di sincronizzazione che incapsula uno o più oggetti dello spedizioniere del nocciolo e di cui la semantica di sincronizzazione è accessibile via WaitForSingleObject ed i relativi cugini.  In qualunque momento un oggetto di sincronizzazione nonsignaled o segnalato, cioè l'oggetto può soltanto essere in una di due condizioni possibili.

Tutta famiglia di WaitFor degli api compreso l'attesa di WaitForSingleobject su una maniglia dell'oggetto o le maniglie fino ad alcuni test di verifica specificati è incontrata.  I due test di verifica di base per tutti questi api sono la condizione segnalata dell'oggetto di cui sulla maniglia sta attendendo e un valore di prespegnimento.  Così un filetto che denomina le attese di questo api finchè l'oggetto specificato entra nella condizione segnalata o nel prespegnimento specificato ha espirato.  Poco o nessun tempo CPU è usato quando un tal filetto è nella condizione di attesa.

Nel caso degli eventi, un CreateEvent o un OpenEvent restituisce una maniglia ad un oggetto di evento.  Quando un evento è nella condizione segnalata significa che quello l'evento ha la capacità di liberare uno o più filetti che aspettano questo evento particolare da segnalare.  Quando un evento è nella condizione nonsignaled non libererà alcun filetto attendente.  Inizialmente la condizione di un evento nonsignaled.  Una condizione dell'oggetto di evento è regolata esplicitamente al segnalato a da SetEvent o da PulseEvent.  Gli oggetti di evento inoltre sono utilizzati nei funzionamenti coincisi come lettura da uno zoccolo, nel qual caso la condizione di oggetto di evento è regolata al segnalato a dal nocciolo piuttosto che da un'applicazione.

Gli eventi inoltre vengono in due tipi ripristinati.  Se un evento è un evento di manuale-risistemazione, quindi tutto il ritorno di WaitForSingleObjects che aspetta quell'evento in caso affermativo configurato.  In altre parole un evento di manuale-risistemazione può innescare l'azione dagli uno o più WaitForSingleObject o i relativi cugini.  Una condizione dell'oggetto di evento di manuale-risistemazione deve essere ripristinata esplicitamente al nonsignaled a da ResetEvent.

Per un oggetto di evento del ripristino automatico, WaitForSingleObject ed esso è rapporti ripristinato

WaitForSingleObject Porting a Linux - parte 1

Recentemente sono stato coinvolgere nel porting un'applicazione a 32 bits che inizialmente è scritto stata per il NT di Microsoft Windows a GNU/Linux.  Questa applicazione ha contenuto tantissime chiamate a NtWaitForSingleObject e un più piccolo numero delle chiamate a NtWaitForMultipleObject. 

Ora qualcuno che abbia dovuto port il codice che contiene più di alcuni casi di questi api particolari Win32, o i loro cugini vicini WaitForSingleObjectEx, MsgWaitForMultipleObjects, MsgWaitForMultipleObjectsEx, ecc. ad Unix o GNU/Linux probabilmente già sta rabbrividicendo con il ricordo dei giorni e delle notti ardui lunghi di codificazione di approssimazioni successive per provare ed imitare correttamente la semantica e la funzionalità di questi api specifici particolari di Microsoft Windows, ma per il lettore che ancora non ha dovuto tentare di port una tal applicazione, questo alberino ed il mio alberino seguente può aiutarlo salvo la vostra sanità di mente (e possibilmente i vostri capelli!) un momento in avvenire.

A proposito, entrambi api sono contrassegnati hanno disapprovato in MSDN da Microsoft ma ancora funzionano come preveduti in Windows NT ed in Windows Xp.  Non sono sicuro circa Windows Vista o Windows 7 poichè non li ho verificati su questi sistemi operativi.  I due api disapprovati sono stati sostituiti dagli api equivalenti WaitForSingleObject e WaitForMultipleObject rispettivamente.  Per il resto di questo alberino discuterò appena gli api del rimontaggio ma più di che cosa dico sia valido per disapprovata o il rimontaggio api.

Su primo esame WaitForSingleObject sembra ragionevolmente benigno.  La descrizione nelle condizioni di MSDN che “questa funzione restituisce quando l'oggetto specificato è nella condizione segnalata o quando l'intervallo di prespegnimento trascorre„.  Suona come un api ragionevolmente semplice ed innocuo, destra?  Forse qualche cosa di simile al pthread_cond_timedwait di POSIX.1 api.  Bene, siete completamente errato e questo alberino e ciò che segue spiegheranno perché.

WaitForSingleObject ed i relativi cugini possono aspettare un segnale da c'è ne o tutto seguire “obietta„: cambi la notifica, l'input della sezione comandi, l'evento, il lavoro, la notifica delle risorse di memoria, il mutex, il processo, il semaforo, il filetto ed il temporizzatore waitable ed in circostanze limitate sulle lime e sull'ingresso/uscita della lima.  Una volta segnalato giustamente, un filetto è sbloccato e continua.  Nessun api standardizzato pubblicato nel mondo di Unix o di GNU/Linux viene prossimo a trattare questa gamma degli oggetti in un singolo api.

Ciò è probabilmente l'una singola zona dove un Win32 api è progettato più meglio che l'insieme di Unix o di GNU/Linux api.  In GNU/Linux ed in Unix ci sono api specifici per aspettare i generi differenti di