Beste Tweakers,
Ik zit met een probleem. Ik ben bezig met het schrijven van een memory scanner. Deze schrijft zijn data naar een file. Gezien de hoeveelheid data, die kan oplopen tot 2 ~ 3 GB, zou ik het schrijven naar de files graag asynchroon willen laten doen. Hierdoor blijft mijn applicatie niet hangen op de punten waar de disk de bottleneck is, en zal de resterende data alsnog naar de files worden geschreven nadat de scan klaar is.
Ik heb een mooie manier gevonden met WriteFile(Ex) en overlapped I/O. Hiermee kan ik de handle en de buffer met data er gewoon in fietsen en het systeem doet de I/O zelf. Voor het design/functionaliteit van mijn applicatie heb ik geen terugkoppeling nodig van: "ik ben klaar met schrijven", dus met WriteFile zat ik prima.
Echter loop ik tegen het probleem aan dat mijn applicatie de gebruikte buffer en handles al heeft vrijgegeven op het moment dat de asynchrone operations nog bezig zijn. hierdoor wordt soms incomplete en verkeerde data naar de files geschreven, wat mij in een volgende fase behoorlijke problemen geeft.
Ik heb gezien dat ik met WriteFileEx een callback kan aangeven die mij aangeeft wanneer de functie klaar is met schrijven, maar hier krijg ik het probleem dat deze functie mij niet aangeeft welke handle het betreft. Dat betekent dat ik op dat moment niet de mogelijkheid heb de handle te closen en de juiste buffer vrij te geven. Let op, dit is namelijk echt een must voor mijn applicatie. Als er een aantal buffers niet op tijd worden vrijgegeven zal de applicatie snel buiten zijn working set treden, wat in principe helemaal niet nodig hoeft te zijn.
Mijn vraag is eigenlijk: Hoe kan ik er voor zorgen dat ik een callback heb, ofwel een push naar mijn applicatie, die mij aan kan geven welke handle/buffer de WriteFile operation betreft? Hiermee los ik het probleem op van het te vroeg vrijgeven van de buffers en handles, want ik kan dan in de callback deze resources vrijgeven.
Alvast bedankt!
Ik zit met een probleem. Ik ben bezig met het schrijven van een memory scanner. Deze schrijft zijn data naar een file. Gezien de hoeveelheid data, die kan oplopen tot 2 ~ 3 GB, zou ik het schrijven naar de files graag asynchroon willen laten doen. Hierdoor blijft mijn applicatie niet hangen op de punten waar de disk de bottleneck is, en zal de resterende data alsnog naar de files worden geschreven nadat de scan klaar is.
Ik heb een mooie manier gevonden met WriteFile(Ex) en overlapped I/O. Hiermee kan ik de handle en de buffer met data er gewoon in fietsen en het systeem doet de I/O zelf. Voor het design/functionaliteit van mijn applicatie heb ik geen terugkoppeling nodig van: "ik ben klaar met schrijven", dus met WriteFile zat ik prima.
Echter loop ik tegen het probleem aan dat mijn applicatie de gebruikte buffer en handles al heeft vrijgegeven op het moment dat de asynchrone operations nog bezig zijn. hierdoor wordt soms incomplete en verkeerde data naar de files geschreven, wat mij in een volgende fase behoorlijke problemen geeft.
Ik heb gezien dat ik met WriteFileEx een callback kan aangeven die mij aangeeft wanneer de functie klaar is met schrijven, maar hier krijg ik het probleem dat deze functie mij niet aangeeft welke handle het betreft. Dat betekent dat ik op dat moment niet de mogelijkheid heb de handle te closen en de juiste buffer vrij te geven. Let op, dit is namelijk echt een must voor mijn applicatie. Als er een aantal buffers niet op tijd worden vrijgegeven zal de applicatie snel buiten zijn working set treden, wat in principe helemaal niet nodig hoeft te zijn.
Mijn vraag is eigenlijk: Hoe kan ik er voor zorgen dat ik een callback heb, ofwel een push naar mijn applicatie, die mij aan kan geven welke handle/buffer de WriteFile operation betreft? Hiermee los ik het probleem op van het te vroeg vrijgeven van de buffers en handles, want ik kan dan in de callback deze resources vrijgeven.
Alvast bedankt!