Vertaal

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
Beeld van XSLT 2.0 en XPath 2.0 de Verwijzing van de Programmeur (Programmeur aan Programmeur)
Beeld van de Concepten van het Werkende Systeem
Beeld van Ontwikkeling van de Pit Linux (3de Uitgave)
Beeld van Androde Draadloze Ontwikkeling van de Toepassing

Porting WaitForSingleObject aan Linux - Deel 2

In mijn laatste post ik het gebruik van WaitForSingleObject met betrekking tot mutexes en mogelijke manieren besprak om gelijkwaardige functionaliteit toen porting dergelijke code aan GNU/Linux uit te voeren. In deze post zal ik het gebruik van dit API met gebeurtenisvoorwerpen in Microsoft Windows beschrijven en zal mogelijke manieren voorstellen om dergelijke code aan GNU/Linux of Unix te posten.

Eerst, heeft wat achtergrond op gebeurtenis bezwaar. Een gebeurtenisvoorwerp is enkel een ander type van het voorwerp van de de pitverzender van Vensters. Van een prespective codage, is een gebeurtenisvoorwerp een synchronisatievoorwerp dat n of meerdere voorwerpen inkapselt van de pitverzender en de waarvan synchronisatiesemantiek via WaitForSingleObject en zijn neven toegankelijk is. In om het even welke bepaalde tijd is een synchronisatievoorwerp of nonsignaled of signaleerde, d.w.z. kan het voorwerp slechts in n van twee mogelijke staten zijn.

Alle familie WaitFor van APIs met inbegrip van WaitForSingleobject wacht op een objecten handvat of handvatten tot sommige gespecificeerde criteria met. is. De twee basiscriteria voor al deze APIs zijn de gesignaleerde staat van het voorwerp op waarvan handvat het wacht en een onderbrekingswaarde. Aldus een draad die dit API roept wacht tot het gespecificeerde voorwerp ingaat de gesignaleerde staat of de gespecificeerde onderbreking is verlopen. Weinig of geen Cpu-tijd wordt gebruikt wanneer zulk een draad in de wachttijdstaat is.

In het geval van gebeurtenissen, komen een CreateEvent of een OpenEvent een handvat op een gebeurtenisvoorwerp terug. Wanneer een gebeurtenis in de gesignaleerde staat is betekent het dat dat de gebeurtenis heeft de capaciteit om n of meerdere draden vrij te geven wachtend op deze bepaalde te signaleren gebeurtenis. Wanneer een gebeurtenis in nonsignaled staat is het geen het wachten draad zal vrijgeven. Aanvankelijk is de staat van een gebeurtenis nonsignaled. De staat van gebeurtenisobjecten wordt geplaatst uitdrukkelijk aan gesignaleerd door SetEvent of PulseEvent. De voorwerpen van de gebeurtenis worden ook gebruikt in overlapte verrichtingen zoals lezing van een contactdoos, waarbij de gebeurtenisobjecten staat aan gesignaleerd door de pit eerder dan door een toepassing wordt geplaatst.

De gebeurtenissen komen ook in twee teruggestelde types. Als een gebeurtenis een het hand-terugstellengebeurtenis is, dan al terugkeer WaitForSingleObjects dat op die gebeurtenis als zo gevormd wacht. Met andere woorden kan een het hand-terugstellengebeurtenis actie door n of meerdere WaitForSingleObject of zijn neven teweegbrengen. De staat van van de het hand-terugstellengebeurtenis objecten moet worden teruggesteld uitdrukkelijk aan nonsignaled door ResetEvent.

Voor een voorwerp van de het auto-terugstellengebeurtenis, is WaitForSingleObject en het teruggesteld relaties

Porting WaitForSingleObject aan Linux - Deel 1

Onlangs werd ik gempliceerde in porting een toepassing met 32 bits die aanvankelijk voor Microsoft Windows NT aan GNU/Linux werd geschreven. Deze toepassing bevatte een groot aantal vraag aan NtWaitForSingleObject en een kleiner aantal vraag aan NtWaitForMultipleObject.

Nu om het even wie wie moeten havencode hebben die meer dan een paar instanties van deze bepaalde Win32 APIs bevat, of hun dichte neven WaitForSingleObjectEx, MsgWaitForMultipleObjects, MsgWaitForMultipleObjectsEx, enz. aan Unix of GNU/Linux waarschijnlijk reeds met de herinnering van lange lastige dagen en nachten van vallen en opstaancodage huivert correct de semantiek en de functionaliteit van dit bepaalde Microsoft Windows specifieke APIs te proberen en na te bootsen, maar voor de lezer die nog niet aan haven zulk een toepassing heeft moeten proberen, kunnen deze post en mijn volgende post u sparen uw geestelijke gezondheid (en misschien uw haar helpen!) ooit in de toekomst.

Door de manier, is beide APIs duidelijk afgekeurd in MSDN door Microsoft maar nog het werk zoals die in Vensters NT en Vensters XP wordt verwacht. Ik ben niet zeker over Uitzicht of Vensters 7 van Vensters aangezien ik hen niet op deze werkende systemen heb getest. Twee afgekeurde APIs is vervangen door gelijkwaardige APIs WaitForSingleObject en respectievelijk WaitForMultipleObject. Voor de rest van deze post zal ik enkel de vervanging APIs bespreken maar de meesten van wat ik zeg zullen voor of afgekeurd of de vervanging API geldig zijn.

Op eerste onderzoek schijnt WaitForSingleObject vrij goedaardig. De beschrijving in MSDN verklaart dat Deze functie terugkeert wanneer het gespecificeerde voorwerp in de gesignaleerde staat is of wanneer het onderbrekingsinterval verstrijkt. Geluiden zoals vrij eenvoudige en onschadelijke API, recht? Misschien iets gelijkend op POSIX.1 API pthread_cond_timedwait. Goed, bent u volkomen verkeerd en deze post en het volgende zullen waarom verklaren.

WaitForSingleObject en zijn neven kunnen op een signaal van om het even welk of alle volgende voorwerpen wachten: veranderings bericht, consoleinput, gebeurtenis, baan, het bericht van het geheugenmiddel, mutex, proces, seinpaal, draad en waitable tijdopnemer en in beperkte omstandigheden op dossiers en dossier I/o. Wanneer geschikt gesignaleerd, is een draad gedeblokkeerd en gaat verder. Geen gepubliceerde gestandaardiseerde API in de GNU/Linux of wereld van Unix komt gekomen aan de behandeling van dit gamma van voorwerpen in n enkele API.

Dit is waarschijnlijk het n enkele gebied waar een Win32 API beter dan de GNU/Linux of reeks van Unix API wordt ontworpen. In GNU/Linux en Unix zijn er specifieke APIs om op verschillende soorten te wachten