Je suis très nouveau à ce sujet et je m'excuse si ma question n'est pas claire.Besoin de savoir comment vérifier si la chaîne entrée s'est terminée dans un enregistreur thread-safe en C++
J'ai créé un enregistreur de thread sécurisé en C++. Cet enregistreur sera utilisé dans un grand programme & sera appelé à partir de plusieurs endroits. J'utilise un singleton donc il n'y a qu'une seule instance de l'enregistreur. Cet enregistreur génère un fichier & vers la console. Il se comporte comme cout; il prend une chaîne d'un autre fichier (la concatène si nécessaire), stocke les peices dans un tampon jusqu'à ce que la chaîne soit terminée, puis sort avec cout. La chaîne est stockée en tant que const char *. À l'heure actuelle, les mutex sont verrouillés dans une fonction et déverrouillés dans une autre fonction (c'est mon problème) qui surcharge l'opérateur endl.
Mon problème est que cette fonction (où les mutex sont déverrouillés) ne fonctionne que si l'utilisateur écrit endl dans les autres fichiers où l'enregistreur est appelé. J'ai besoin que ce soit un utilitaire polyvalent qui ne dépendra pas de ce que l'utilisateur écrit car un utilisateur ne peut pas utiliser endl ou peut l'utiliser trop souvent. J'ai maintenant besoin de quelques moyens pour mon enregistreur d'identifier quand la chaîne (de l'autre fichier) est faite pour qu'elle puisse vider le tampon. Actuellement, endl est comme un mot-clé & J'ai besoin de quelques moyens pour le faire fonctionner sans mots-clés. Je pensais initialement que je pourrais trouver un moyen de vérifier le caractère de fin "\ 0" dans la chaîne, puis d'utiliser cette vérification pour savoir que la chaîne est terminée et ensuite vider le tampon. Cependant, je reçois des erreurs hors limites quand je fais cela.
Merci pour votre temps
Il serait utile si vous mettez un peu de code source, comme comment l'enregistreur est appelé. Quel est le format général des messages d'erreur et quel type utilisez-vous? De votre question, il pourrait s'agir de std :: string, stream, ou de tableaux de caractères. –
L'enregistreur est conçu pour gérer à la fois std :: string et const char * il gère les deux – joy