J'ai un programme C++ natif qui utilise des "files d'attente d'événements" pour exécuter des fonctions sur différents threads. J'attribue une classe "event" sur le tas, et la place sur l'une des files d'attente de mes threads pour l'exécution.Comment utiliser le préprocesseur pour calculer et stocker des hachages lors de la compilation?
Tout fonctionne très bien, mais il est très difficile de retracer l'origine de ces "événements". Je voudrais que chaque "événement" stocke quelques informations concernant d'où il vient. En ce moment j'utilise _ReturnAddress()
intrinsèque pour cela, mais je voudrais aussi avoir la chaîne de nom de fichier et le numéro de ligne. Je suis d'accord avec l'utilisation de macros pour planifier mes "événements".
Bien sûr, je ne veux pas payer le prix pour avoir ces chaînes.
Y at-il un moyen d'avoir le préprocesseur construire et vider pour classer une carte de "id" => "fichier, ligne", où le "id" serait un nombre unique incrémenté chaque fois que ma macro est élargie ? Je pourrais stocker cet identifiant comme mon origine.
Ou peut-être de calculer un hachage très court du nom de fichier afin que je puisse l'utiliser lors de l'exécution?
Toutes les idées sont les bienvenues.
Une idée intéressante. Je vais devoir regarder dans StackWalk64 un peu plus. La raison pour laquelle je veux l'origine est à des fins de traçage au cas où l'application se bloque. Il échoue presque toujours dans la boucle des messages, donc je n'ai aucune idée d'où vient le message. J'ai un peu de traçage pour les versions de débogage, mais j'aimerais aussi quelque chose pour la production. –
Je regarderais certainement dans StackWalk64 alors.Vous pourriez rencontrer des problèmes si vous générez un très grand nombre d'événements sur une courte période (par exemple des dizaines de milliers de secondes ou plus), alors le coût de StackWalk peut être prohibitif pour être tout le temps. – Michael