Visual Studio C ++ / CLR - (Mutex) не может преобразовать аргумент 3 из 'bool *' в 'bool%' - PullRequest
0 голосов
/ 27 мая 2020

Я пробовал использовать адресную операцию в clr Mutex, так как я разрабатываю с использованием winforms, я не могу понять, что использует оператор% в объявлении логической переменной. Mutex(bool initiallyOwned, Syste::String ^name, bool %createdNew) Это прототип функции мьютекса, которую я использую. и я просто не могу заставить его работать с моей реализацией из-за третьей части параметра. Функция Mutex, более конкретно, как я могу работать с третьим параметром.

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Вам не нужен оператор & «адрес», чтобы преобразовать bool в bool%.

bool createdNew;
Mutex^ mutex = gcnew Mutex(true, "MyApplicationName", createdNew);
// Remove the ampersand ------------------ right here ^

Другие примечания:

  • Все будет работать лучше, если вы не ограничитесь проверкой createdNew. Если он не был создан новым, вам также нужно попытаться заблокировать его.
  • Все будет работать лучше, если вы освободите Mutex, а не просто закроете ссылку на него и позволите удалить ее. Вы можете сделать это, вставив звонок на ReleaseMutex после звонка на Application::Run.
  • Вы должны выбрать имя более уникальное, чем «MyApplicaitonName». Сгенерируйте Guid, бей по клавиатуре, что-то в этом роде.
0 голосов
/ 27 мая 2020

Конструктор ожидает ссылку отслеживания для третьего аргумента. Компилятор автоматически создает ссылку отслеживания, когда вы обращаетесь к переменной, поэтому просто отбросьте & адрес-of:

bool createdNew;
System::Threading::Mutex^ mutex = gcnew System::Threading::Mutex(true, "MyName", createdNew);

Вышеупомянутое аналогично пошаговому эквиваленту:

bool createdNew;              // variable to be set by the mutex constructor
bool% trackNew = createdNew;  // explicit tracking reference to 'createdNew'
System::Threading::Mutex^ mutex = gcnew System::Threading::Mutex(true, "MyName", trackNew);

...