Non è supportato perché l'implementazione std :: mutex utilizza GetCurrentThreadId(). Questa è una funzione winapi che non è supposta da utilizzare nel codice gestito poiché potrebbe essere in esecuzione su un host CLR personalizzato che non utilizza thread per implementare il threading.
Questo è il buon tipo di problema da avere, mostra che stai creando il tuo codice sbagliato. Il tuo C++ nativo viene compilato con/clr in effetto. Che funziona piuttosto bene, tutto il codice compatibile con C++ 03 può essere compilato su MSIL e ottenere una compilazione just-in-time in fase di runtime, proprio come il codice gestito. Non vuoi che ciò accada, il tuo codice C++ nativo dovrebbe essere compilato in codice macchina e ottenere l'amore dell'ottimizzatore del codice compilazione.
Disattivare l'opzione/clr per questo file di codice sorgente, e possibilmente altri, nel progetto. Fare clic con il tasto destro del mouse su + Proprietà, Generale. Se nel file .h viene visualizzato il numero mutex
in un file sorgente C++/CLI, si ha un problema più grande, utilizzare un'interfaccia o un pimpl per nascondere i dettagli dell'implementazione.
fonte
2013-04-04 22:12:40
Perché non usi 'Monitor', che è praticamente l'equivalente gestito di' mutex'? – svick
Ma posso usarlo all'interno del codice non gestito? –
La tua migliore scommessa è probabilmente per [disattivare il supporto CLR] (http://stackoverflow.com/questions/808250/vc2008-how-to-turn-clr-flag-off-for-individual-files-in-c- cli-project) per una singola unità di compilazione (file cpp). –