高人指点C#中如何用信号量来实现进程的互斥

doomhaha 2005-10-18 09:31:08
我想使一个进程在WinXP下同时只能有一个运行,以前用delphi时的语句如下,不知道如何翻译成C#的语法?包括C#中对CreateSemaphore,GetLastError,CloseHandle三个API的声明语句
//-- 判断程序是否已启动;
function fIfAppExist(AppTitle : String) : Boolean;
var
hSem : THandle;
semNm : Array[0..256] of Char;
begin
Result := False;
StrPCopy(semNm, 'Semaphore.'+AppTitle);
hSem := CreateSemaphore(nil, 0, 1, semNm); //-- 在内存创建一个信号量

//-- 如果信号量已经存在,则说明应用程序已经存在
if ((hSem <> 0) AND (GetLastError() = ERROR_ALREADY_EXISTS)) then
begin
CloseHandle(hSem);
Result := True;
end;
end;
...全文
197 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
rcom10002 2005-10-18
  • 打赏
  • 举报
回复
if (process.Length > 1)
{
System.Diagnostics.Process.GetCurrentProcess().Kill();
}
doomhaha 2005-10-18
  • 打赏
  • 举报
回复
可问题时我的这个窗口是禁止关闭的,我在关闭的Form1_Closing事件已写了e.Cancel = true;
rcom10002 2005-10-18
  • 打赏
  • 举报
回复
private void Form1_Load(object sender, System.EventArgs e)
{
System.Diagnostics.Process[] process = null;
process = System.Diagnostics.Process.GetProcessesByName("YourProcessName");
if (process.Length > 1)
{
this.Close();
}
}
本课程以2021年度大数据技术学习为背景,重点围绕Spark 3.0框架展开系统讲解。课程内容基于2020年9月官方正式发布的稳定版本Spark 3.0.1进行设计,确保所学技术紧跟行业前沿。整个教学体系划分为九个核心模块,涵盖从基础到高级的完整知识路径。 首先从Spark集群环境部署与配置入手,奠定实际操作基础。随后深入剖析Spark Core核心原理与编程模型,掌握分布式计算基础。课程进一步延伸至实时数据处理领域,系统讲解Spark Streaming流式计算框架及其应用场景。 在数据查询与分析部分,重点介绍Spark SQL模块,学习结构化数据处理方法。同时结合Structured Streaming技术,探讨现代流批一体架构的实现方式。通过综合实战案例,演示如何将各模块知识融会贯通,解决复杂业务场景的数据处理问题。 为适应多样化开发需求,课程专门设置多语言编程章节,展示Scala、Python、Java等不同语言在Spark生态的开发模式。针对Spark 3.0版本革新,详细解读其在性能优化、API改进及功能增强方面的最新特性。最后部分聚焦系统性能调优方法论,包括资源配置、执行计划优化等进阶内容,全面提升分布式系统运维能力。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧