首页 > 系统相关 >C# 使用共享内存通信

C# 使用共享内存通信

时间:2024-03-04 13:22:40浏览次数:15  
标签:Thread C# 通信 buffer myevent th new message 共享内存

//Shared Memory


using (MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen("sharedmem",500))
{
	object obj = new Object();
	ManualResetEvent myevent = new ManualResetEvent(false);
	
	//写入线程每500ms发送一个消息,并发出一次event
	Thread th_writer = new Thread(() =>
	{
		int i = 0;
		while (true)
		{
			using (MemoryMappedViewStream buff = mmf.CreateViewStream())
			{
				byte[] buffer = Encoding.UTF8.GetBytes($"hello reader!{i}");
				lock (obj)
				{
					buff.Write(buffer, 0, buffer.Length);
					$"msg sent".Dump();
					myevent.Set();
				}
				i++;
				Thread.Sleep(500);
			}
		}
	});

	//读取线程循环等待event后读取消息
	Thread th_reader = new Thread(() =>
	{
		while (true)
		{
			using (MemoryMappedViewStream stream = mmf.CreateViewStream())
			{
				myevent.WaitOne();
				byte[] buffer = new byte[1000];
				string message = "";
				lock (obj)
				{
					stream.Read(buffer, 0, buffer.Length);
					message = Encoding.UTF8.GetString(buffer).Trim('\0');
				}
				$"receive msg:{message}".Dump();
				myevent.Reset();

				Thread.Sleep(5);
			}
		}
	});

	th_reader.Start();
	th_writer.Start();

	while (true)
	{
		await Task.Delay(1000);
	}
}

标签:Thread,C#,通信,buffer,myevent,th,new,message,共享内存
From: https://www.cnblogs.com/senya8030/p/18051601

相关文章

  • .net core UI测试
    背景从后端测试的角度来看前端测试;后端测试  黑盒测试:自动化接口测试,不关心内部实现,只关心入参出参,出于用户角度来测试完整功能;  白盒测试:代码层单元测试,关心内部实现,聚焦核心方法,出于开发角度来测试部分核心功能;前端测试  黑盒测试:(待实现)  白盒测试:(未实现)......
  • mysqldump: Error: Binlogging on server not active
    1.问题今天在备份数据库时遇到问题,提示二进制日志尚未开启,无法使用--master-data=2选项2.解决启用二进制日志记录,打开MySQL配置文件(通常是my.cnf或my.ini),添加以下选项即可。保存并重新启动MySQL服务器#开启二进制日志binloglog-bin=mysql-bin#开启Binlog一般只需......
  • 18_SPI通信协议
    SPI通信协议SPI介绍硬件电路未被选中的从机MISO线为高阻态移位示意图SPI时序基本单元MISO开始和结束为高阻态SPI时序发送指令指定地址写指定地址读......
  • Application.Caller详细解释
    官网给的解释基本看不懂反复测试下能搞懂的部分,我知道就三点1)单元格调用自定义函数的时候,表示单元格自己单元格调用老版本又分2种同样下面的代码Functiontest()DimrngAsRangeSetrng=Application.Callertest=rng.AddressEndFunction如果我在C14单元格......
  • Docker容器构建
    弊端:镜像的使用者不知道镜像构建细节镜像的构建者忘记构建的细节需要手动操作一、使用Dockerfile来定制镜像1.编写DockerfileDockerfile是一个文本文件,用以说明镜像的构建步骤,通过dockerbuild命令进行自动的构建举个例子FROMubuntu:18.04COPYa.txt/a.txtRUNec......
  • 现有Sketch数据结构|持续更新|菜鸟学习
    写在前面比较简略,偏差之类的理论推导建议去读论文,如果有误麻烦指出套话Sketch的基础是概要数据结构(SummaryDataStructure),它是一种可以以较小的内存消耗来表示和估计大规模数据集的某些属性的数据结构。概要数据结构通过对原始数据进行压缩、聚合或采样,以及使用一些统计方法......
  • switch 语句
    importjava.util.Scanner;publicclassday_3{publicstaticvoidmain(String[]args){//switch语句/*格式switch(表达式){case取值1:语句体;break;case取值2:......
  • java Object类
    javaObject类Object包含了9大常用方法:getClass()hashcode()toString()equals()finalize()notify()notifyAll()wait()clone()  一、toString()  方法摘要  publicStringtoString():返回该对象的字符串表示。  toString方法返回该对象的字符串表示,其实该字符串内......
  • 现有Sketch数据结构|持续更新|菜鸟学习
    写在前面比较简略,偏差之类的理论推导建议去读论文,如果有误麻烦指出套话Sketch的基础是概要数据结构(SummaryDataStructure),它是一种可以以较小的内存消耗来表示和估计大规模数据集的某些属性的数据结构。概要数据结构通过对原始数据进行压缩、聚合或采样,以及使用一些统计方法......
  • 如何在 C# 中以编程的方式将 CSV 转为 Excel XLSX 文件
    前言MicrosoftExcel的XLSX格式以及基于文本的CSV(逗号分隔值)格式,是数据交换中常见的文件格式。应用程序通过实现对这些格式的读写支持,可以显著提升性能。在本文中,小编将为大家介绍如何在Java中以编程的方式将【比特币-美元】市场数据CSV文件转化为XLSX文件。具体操作步骤如下:......