c++-cli - Visual Studio C++/CLR - (Mutex) 无法将参数 3 从 'bool *' 转换为 'bool %'
问题描述
我尝试在 clr Mutex 中使用地址操作,因为我正在使用 winforms 进行开发,我无法真正理解 % 运算符在布尔变量的声明中使用了什么。Mutex(bool initiallyOwned, Syste::String ^name, bool %createdNew)
这是我正在使用的互斥锁函数的原型。由于参数的第三部分,我无法让它与我的实现一起使用。
bool createdNew = true;
System::Threading::Mutex^ mutex = gcnew System::Threading::Mutex(true, "MyApplicationName", &createdNew);
if (createdNew){
MessageBox::Show("First Instance");
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Application::Run(gcnew ProjectMod::loginForm());
}else{
System::Diagnostics::Process^ current = System::Diagnostics::Process::GetCurrentProcess();
for each (System::Diagnostics::Process ^ process in System::Diagnostics::Process::GetProcessesByName(current->ProcessName))
if (process->Id != current->Id){
if (IsIconic((HWND)process->MainWindowHandle.ToPointer()))
ShowWindow((HWND)process->MainWindowHandle.ToPointer(), SW_RESTORE);
SetForegroundWindow((HWND)process->MainWindowHandle.ToPointer());
break;
}
}
有人可以请帮助我应该如何更具体地调用 Mutex 函数如何处理第三个参数。
解决方案
您不需要&
“地址”运算符将 abool
转换为 a bool%
。
bool createdNew;
Mutex^ mutex = gcnew Mutex(true, "MyApplicationName", createdNew);
// Remove the ampersand ------------------ right here ^
其他注意事项:
- 如果你不局限于检查,事情会更好
createdNew
。如果它不是新创建的,您还需要尝试锁定它。 - 如果你释放 Mutex,事情会更好,而不是仅仅关闭对它的引用并让它被删除。您可以通过在调用 to
ReleaseMutex
之后坚持调用 to 来做到这一点Application::Run
。 - 您应该选择一个比“MyApplicaitonName”更独特的名称。生成一个 Guid,敲击键盘,类似的东西。
推荐阅读
- javascript - React中数据变化时如何运行临时效果?
- python - 烧瓶如何用在 SelectField 中选择的信息填充输入字段
- node.js - 在 Nodejs 中使用 curl 下载文件
- javascript - 如果 Redis 宕机,节点 Redis 会一直调用错误函数
- php - 使用加载符号 PHP 创建 CSV 问题
- javascript - 在 laravel 刀片问题中打开设备纵向模式的模式
- migration - Http 客户端升级到 Micronaut 3.0 失败(ClassNotFoundException AsyncSSLPrivateKeyMethod)
- html - 我该如何修复这个 vue-carousel?
- firebase-cloud-messaging - 我可以在 Firebase 云消息传递控制台中向特定用户发送通知吗
- angular - 我想返回在 d url 中获取的特定 id 详细信息