【发布时间】:2013-04-30 23:43:11
【问题描述】:
我有一个用 c++ (atl) 编写的 ie 扩展,问题是每次我打开一个新选项卡时,我的扩展的新实例都会运行。我需要一种方法来知道是否有一个实例已经在运行。
我想使用互斥锁:
if(!Utils::IsAddonMutexRunning())
{
aHandle = Utils::CreateAddonMutex();
}
当 IE 退出时:
STDMETHODIMP cMyAddon::OnQuit()
{
if(m_pAddon!=NULL)
{
Utils::ReleaseMutex(aHandle);
m_pAddon->Quit();
}
return S_OK;
}
问题是互斥锁永远不会被释放,因为 onQuit 没有被触发。
有什么想法或其他解决方案吗?
编辑:
问题是当我检查互斥体是否存在时,感谢盛的回答。
我在 SetSite 方法中调用了 if(!Utils::IsAddonMutexRunning()):
bool Utils::IsAddonMutexRunning()
{
HANDLE hMutexOneInstance = ::CreateMutex( NULL, FALSE,
_T("MYADDONMUTEX2013_____"));
DWORD retVal = WaitForSingleObject(hMutexOneInstance, 0);
bool ret = (retVal == WAIT_OBJECT_0 || retVal == WAIT_ABANDONED);
CloseHandle(hMutexOneInstance);
return !ret;
}
【问题讨论】:
-
谢谢,这就是解决方案。
标签: c++ internet-explorer bho