Sto creando un programma che riceverà i messaggi da una macchina remota e ha bisogno di scrivere i messaggi su un file su disco. La difficoltà che sto riscontrando risiede nel fatto che lo scopo di questo programma è quello di testare le prestazioni della libreria che riceve i messaggi e, pertanto, ho bisogno di assicurarmi che scrivere i messaggi sul disco non influenzi le prestazioni della libreria . La libreria consegna i messaggi al programma tramite una funzione di callback. Un'altra difficoltà è che la soluzione deve essere indipendente dalla piattaforma.Come implementare la scrittura asincrona indipendente da piattaforma su file?
Quali opzioni ho?
ho pensato di quanto segue:
- utilizzando
boost:asio
a scrivere nel file, ma a quanto pare (vedi this documentazione) che scrittura asincrona di file si trova nella parte specifica di Windows di questa biblioteca - quindi questo non può essere Usato. - Utilizzare
boost::interprocess
per creare una coda di messaggi ma this documentation indica che ci sono 3 metodi in cui i messaggi possono essere inviati e tutti i metodi richiederebbero il blocco del programma (implicitamente o meno) se la coda dei messaggi è piena, cosa che non posso rischio. - creazione di un
std::deque<MESSAGES>
per passare alla deque dalla funzione di richiamata e far uscire i messaggi durante la scrittura sul file (su un thread separato), ma i contenitori STL sono not guaranteed to be thread-safe. Potrei bloccare la spinta e aprire il deque, ma stiamo parlando di 47 microsecondi tra i messaggi successivi, quindi vorrei evitare del tutto le serrature.
Qualcuno ha più idee su possibili soluzioni?
47micros tra quali messaggi? È la cadenza della macchina remota? –