社区
进程/线程/DLL
帖子详情
MSN中的互斥量是怎么用的
developing_T
2007-02-13 03:06:24
象MSN那样,只能启动一个,如果MSN已经启动,你再到程序里点MSN,则已经启动的MSN窗口会显示出来,这个是怎么做到的。
...全文
312
15
打赏
收藏
MSN中的互斥量是怎么用的
象MSN那样,只能启动一个,如果MSN已经启动,你再到程序里点MSN,则已经启动的MSN窗口会显示出来,这个是怎么做到的。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
roger_77
2007-02-15
打赏
举报
回复
检查进程
用FindWindow
fullhappy
2007-02-15
打赏
举报
回复
楼主的意思好像是针对进程只开一个问题,你自己程序写一下不就可以啦,跟具体MSN里面内核没关系。
BeRoy
2007-02-15
打赏
举报
回复
这是BCB的,懂这意思就可以
void __fastcall TYZClient::FormCreate(TObject *Sender)
{
//use mutex
Application->Title=MUTEX_NAME;
HANDLE PrevInstHandle;
HANDLE Mutex = OpenMutex(SYNCHRONIZE,false,Application->Title.c_str());
if (Mutex != NULL)//已经存在
{
MessageBox(NULL,"程序已经处于运行中","信息",MB_OK);
String AppTitle=Application->Title;
SetWindowText(Application->Handle,NULL);
PrevInstHandle = FindWindow("TApplication", AppTitle.c_str());//找到句柄
if(PrevInstHandle != 0)
{
if (IsIconic(PrevInstHandle))//如果是最小化
ShowWindow(PrevInstHandle, SW_RESTORE);
else
BringWindowToTop(PrevInstHandle);
SetForegroundWindow(PrevInstHandle);
}
Application->ShowMainForm = false;
Application->Terminate();
return;
}
else CreateMutex(NULL, false, Application->Title.c_str());
......
}
linuxpgy
2007-02-14
打赏
举报
回复
楼上正解
xharry
2007-02-14
打赏
举报
回复
如果该程序是始终有窗口的, 我们可以通过查找它的窗口的句柄, 激活它
用FindWindow
如果它缩小到了Tray上了, 我们可定义一个消息, 程序收到该消息就显示窗口
珍惜生命远离CPP
2007-02-14
打赏
举报
回复
MSN不是用互斥量的
MSN是基于COM的,只要类厂维持一个msn对象就可以了。
无忧石头
2007-02-13
打赏
举报
回复
HANDLE hMutex = CreateMutex(NULL, TRUE , str); //str -- mutex name
if (hMutex == NULL || GetLastError() == ERROR_ALREADY_EXISTS )
{
//get prev window and popu code
}
askppp
2007-02-13
打赏
举报
回复
不好意思,打错了:
“除非可以通过HWND获得PID”
askppp
2007-02-13
打赏
举报
回复
to xharry(charry):
如何激活?人家楼主问是这个。
to icr_mio(Logos):
这种方法不好,因为可能有重名窗口,除非可以通过HWND或者PID,但我不知道能不能实现。
icr_mio
2007-02-13
打赏
举报
回复
FindWindow然后ShowWindow啊
kangji
2007-02-13
打赏
举报
回复
Semaphore也行
xharry
2007-02-13
打赏
举报
回复
查找是否有msn的Mutex, 如果有, 再查找msn的进程,然后,激活它,
这个也可以吧
askppp
2007-02-13
打赏
举报
回复
很多办法,用mutex也可以实现。
比如两个mutex就可以解决了,不过需要多一个线程来处理。程序将mutex1锁住,等待mutex2,程序再运行发现mutex1已经锁住,则释放mutex2,原来运行的程序mutex2受信,则调出主窗口,然后继续等待再次受信。
developing_T
2007-02-13
打赏
举报
回复
我是说如果有MSN的进程存在,则把现有的窗口显示出来,这个是怎么做的。
oyljerry
2007-02-13
打赏
举报
回复
Mutex
《程序天下:JavaScript实例自学手册》光盘源码
9.36 使用JavaScript向表格
中
写入数据 9.37 类C# GridView的编辑效果(一) 9.38 类C# GridView的编辑效果(二) 第10章 单选框和复选框 10.1 选择了哪一个单选框 10.2 单击文字实现单选框的选定 10.3 被选
中
的复选...
程序天下:JavaScript实例自学手册
9.36 使用JavaScript向表格
中
写入数据 9.37 类C# GridView的编辑效果(一) 9.38 类C# GridView的编辑效果(二) 第10章 单选框和复选框 10.1 选择了哪一个单选框 10.2 单击文字实现单选框的选定 10.3 被选
中
的复选...
Linux 设备驱动 ====> 并发控制 --- 信号
量
与
互斥
体
信号
量
的使用 信号
量
(semaphore)是用于保护临界区的一种常用方法,他的用法和自旋锁类似,但是,与自旋锁不同的是,当获取不到信号
量
时,进程不会原地打转,而是进入休眠等状态。 Linux
中
信号
量
的操作主要有 1....
NCRE | 四级网络工程师错题
四级网络工程师 ...其缺点是无交互性,用户一旦提交作业就失去了对其运行的控制能力,而且是批处理的,作业周转时间长,用户使用不方便。故选择A选项。 UNIX操作系统
中
,fork()系统调用用于创建进程。仔细阅读
基于请求的分布式
互斥
算法
分布式系统
中
的一组进程可能会同时访问一个资源或者同时执行一个给定的函数,我们称这些资源或者函数为临界区(Critical Section),若不加控制的话,会造成资源或者环境的不一致的现象。保证任何给定时刻只允许一个...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章