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