Sto cercando un modo per eseguire la registrazione asincrona e thread-safe nel mio progetto C++, se possibile su un file. Attualmente sto utilizzando cerr
e clog
per l'attività, ma poiché sono sincroni, l'esecuzione si interrompe brevemente ogni volta che viene registrato qualcosa. È un'app relativamente pesante per la grafica, quindi questo genere di cose è abbastanza fastidioso.Registrazione asincrona thread-thread in C++
Il nuovo logger deve utilizzare l'I/O asincrono per eliminare queste pause. Sarebbe anche auspicabile la sicurezza del thread, visto che intendo aggiungere presto del multithreading di base.
Ho considerato un approccio one-file-per-thread, ma sembrava che avrebbe reso la gestione dei registri un incubo. Eventuali suggerimenti?
Un mutex non significa che se un thread sta già tentando di scrivere, dovrebbe girare fino a quando non è stato sbloccato? In che modo questo aiuta? – Electro
Non ritarderei di certo la conversione dell'oggetto nel flusso. Metterlo in un altro thread significa doverlo sincronizzare ... ed è probabile che faccia male come un matto. –
@Electro - non girare, ma bloccare. Ma se non stai facendo l'elaborazione delle stringhe, è un intervallo MOLTO breve per caricare la coda. L'elaborazione della stringa viene eseguita dal thread di registrazione. @Matthieu, eseguendo l'elaborazione delle stringhe in tempo reale fa molto più male di qualsiasi blocco mutex durante il caricamento di una coda. –