07. december 2001 - 08:31Der er
14 kommentarer og 1 løsning
BSD sockets
Jeg arbejder på en kommunikationsløsning imellem en windowsmaskine og en WxWorks boks. Jeg bruger BSD sockets, men har problemer med at recv() bloker. Er der en metode til at spørge om der er kommet data på socketten, så jeg er fri fra at blokere?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Gør det noget at den blokker? Kan du ikke bare lade socket-læsningen ske i en separat tråd?
Vi snakkede jo sammen i et tidligere spørgsmål omkring det Windows kan gøre med at sende en message, når der var nye data. Det kan du selv simulere:
1) Du laver en inddata-kø, som en semafor (dvs. kun 1 tråd kan tilgå den af gangen)
2) Din main-thread starter en worker-thread
3) Din worker-thread står og læser fra socketen med recv() (og blokker). Når den modtager data (og recv() returnerer), indsættes disse i inddata-kø, og worker-threaden læser igen fra socket\'en
4) Din main-thread checker periodisk om der er nye data i inddata-køen, og hvis der er, hentes de og behandles.
Ovenstående model kan peppes lidt op. Din worker thread kan sende en message til main-thread\'en, efter at data er proppet i inddata-køen. Dermed behøver main-thread\'en ikke aktivt at undersøge inddata-køen.
Problemet er at jeg ikke kan sende når read blokker.
Det skal bruges til at skabe forbindelse til en simulator, hvor hændelserne kommer asynkront.
Jeg kunne oprette to tråde en til at sende og en til at modtage, men jeg har ikke lyst til at bruge to sockets. Måske er jeg tvunget til det hvis jeg bruger BSD?
Jeg tror godt, at du kan lave BSD sockets under MFC.
Køen ville jeg implementere som et cyklisk array, dvs. et array med en fast størrelse, hvor du fylder data i den ene ende, og tager dem ud i den anden. Når der så ikke er plads til flere data i enden, så begynder du at fylde op fra starten igen (såfremt at der er plads).
STL\'s liste kan du tage ud fra både top og bund, så det er let at bruge den som buffer. Jeg har bare ikke lige fundet ud af hvordan jeg sætter den op under MFC. Det må blive mandag. -Nu skal jeg ud og have mig et liv! :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.