当前位置: 首页 > news >正文

有哪些做高考模拟卷的网站如何申请百度竞价排名

有哪些做高考模拟卷的网站,如何申请百度竞价排名,doaction wordpress,dedecms做网站有多快前言 如果一个软件比较复杂或者某些情况下需要拆解,可以考试将软件分解成两个或多个进程,但常规的消息传递又不能完全够用,使用消息共享内存,实现图像传递,当然性能这个方面我并没有测试,仅是一种解决思路…

前言

如果一个软件比较复杂或者某些情况下需要拆解,可以考试将软件分解成两个或多个进程,但常规的消息传递又不能完全够用,使用消息+共享内存,实现图像传递,当然性能这个方面我并没有测试,仅是一种解决思路吧。

一、效果展示

1、调用方

2、被调用方

二、实现代码

1、主调打开调用进程

主要是为了拿到Handle,为发送消息函数提供操作句柄。

2、创建共享内存

        /// <summary>/// 创建共享内存/// </summary>/// <returns>0=创建成功;1=创建共享体失败;2=打开失败;3=印射失败; 4=共享内存命名错误</returns>public int CreateMemory(){if (MemSize <= 0) MemSize = 0x00800000;if (ShareName.Length > 0){//创建内存共享体(INVALID_HANDLE_VALUE)m_hSharedMemoryFile = CreateFileMapping(INVALID_HANDLE_VALUE, IntPtr.Zero, (uint)PAGE_READWRITE, 0, (uint)MemSize, ShareName);if (m_hSharedMemoryFile == IntPtr.Zero){m_bAlreadyExist = false;m_bInit = false;MemPtr = IntPtr.Zero;return 1; //创建共享体失败}else{if (GetLastError() == ERROR_ALREADY_EXISTS) //已经创建{m_bAlreadyExist = true;CloseHandle(m_hSharedMemoryFile);m_hSharedMemoryFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, ShareName);if (m_hSharedMemoryFile == null){MemPtr = IntPtr.Zero;return 2;//打开共享内存失败}}else                                         //新创建{m_bAlreadyExist = false;}}//创建内存映射m_rwData = MapViewOfFile(m_hSharedMemoryFile, FILE_MAP_ALL_ACCESS, 0, 0, (uint)MemSize);if (m_rwData == IntPtr.Zero){m_bInit = false;CloseHandle(m_hSharedMemoryFile);MemPtr = IntPtr.Zero;return 3; //创建内存映射失败}else{m_bInit = true;MemPtr = m_rwData;}}else{return 4; //参数错误}return 0;     //创建成功}

3、读取本地图像并写图像数据到共享内存中

 MyAlgoProcessNet.HImage hImage = new MyAlgoProcessNet.HImage(fileName);IntPtr prt = hImage.GetImagePointer1(out string type, out imageData.Widht, out imageData.Height);imageData.dataLength = imageData.Widht * imageData.Height;byte[] datas = new byte[imageData.dataLength];Marshal.Copy(prt, datas, 0, imageData.dataLength);int pos = Marshal.SizeOf(imageData);share1.WriteToMemory(imageData);//写共享内存if (share1.WriteBytes(datas, pos + 1) == 0){WriteMsg("share1写入共享内存成功");}else{WriteMsg("share1写入共享内存失败!!");}public int WriteBytes(byte[] datas, int pos = -1){if (IntPtr.Zero == MemPtr){return -1;}if (pos == -1){Marshal.Copy(datas, 0, MemPtr, datas.Length);}else{IntPtr offPtr = IntPtr.Add(MemPtr, pos);Marshal.Copy(datas, 0, offPtr, datas.Length);}return 0;}

4、通知读取数据

private void SendMsg2(string msg)
{// 获取目标进程句柄IntPtr hWnd = process.MainWindowHandle;// 封装消息byte[] sarr = System.Text.Encoding.Default.GetBytes(msg);int len = sarr.Length;COPYDATASTRUCT cds2;cds2.dwData = (IntPtr)0;cds2.cbData = len + 1;cds2.lpData = msg;// 发送消息WriteMsg(msg + " Start");SendMessage(hWnd, WM_COPYDATA, IntPtr.Zero, ref cds2);WriteMsg(msg + " End");
}

5、被调用方关联消息处理函数

        protected override void OnSourceInitialized(EventArgs e){base.OnSourceInitialized(e);HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;if (hwndSource != null){IntPtr handle = hwndSource.Handle;hwndSource.AddHook(new HwndSourceHook(WndProc));}}

6、被调用方处理图像数据

        private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled){if (msg == WM_COPYDATA){WriteInfo(1, "WndProc Start");COPYDATASTRUCT cds = (COPYDATASTRUCT)Marshal.PtrToStructure(lParam,typeof(COPYDATASTRUCT)); // 接收封装的消息string rece = cds.lpData; // 获取消息内容// 自定义行为//  Console.WriteLine(rece);if (rece == "Read"){Task.Run(() =>{//读共享内存// datastruct = (MemoryClass)shareMemory.ReadFromMemory(typeof(MemoryClass));// WriteInfo(1, $"读取数据:{datastruct.bianliang1},{datastruct.bianliang2},{datastruct.bianliang3}");imageData = (ImageData)shareMemory.ReadFromMemory(typeof(ImageData));int ShareSize = Marshal.SizeOf(imageData);byte[] datas = shareMemory.ReadByteFromMemory(imageData.dataLength, ShareSize + 1);HImage hImage = new HImage();using (PinnedObject pinnedObject = new PinnedObject(datas)){hImage.GenImage1("byte", imageData.Widht, imageData.Height, pinnedObject.Pointer);}// hImage.GenImage1(imageData.DataType, imageData.Widht, imageData.Height, imageData.dataPrt);ImgControl.HalconWindow.AttachBackgroundToWindow(hImage);WriteInfo(1, "图像处理完成");});}// Thread.Sleep(2000);WriteInfo(2, rece);if (rece.Equals("Close")){this.Close();}}return hwnd;}

7、共享内存操作

  internal class ShareMemory{[DllImport("user32.dll", CharSet = CharSet.Auto)]public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam);[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]public static extern IntPtr CreateFileMapping(int hFile, IntPtr lpAttributes, uint flProtect, uint dwMaxSizeHi, uint dwMaxSizeLow, string lpName);[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]public static extern IntPtr OpenFileMapping(int dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, string lpName);[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]public static extern IntPtr MapViewOfFile(IntPtr hFileMapping, uint dwDesiredAccess, uint dwFileOffsetHigh, uint dwFileOffsetLow, uint dwNumberOfBytesToMap);[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]public static extern bool UnmapViewOfFile(IntPtr pvBaseAddress);[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]public static extern bool CloseHandle(IntPtr handle);[DllImport("kernel32", EntryPoint = "GetLastError")]public static extern int GetLastError();private const int INVALID_HANDLE_VALUE = -1;private const int ERROR_ALREADY_EXISTS = 0xB7;//183private const int PAGE_READWRITE = 0x04;private const int FILE_MAP_ALL_ACCESS = 0x0002 | 0x0004;private const int FILE_MAP_READ = 0x0004;private const int FILE_MAP_WRITE = 0x0002;private IntPtr m_hSharedMemoryFile = IntPtr.Zero;private IntPtr m_rwData = IntPtr.Zero;private bool m_bAlreadyExist = false;private bool m_bInit = false;private string ShareName { get; set; } //共享内存的名字private long MemSize { get; set; }//共享内存大小private IntPtr MemPtr { get; set; }//共享内存印射地址/// <summary>/// 共享内存初始化/// </summary>/// <param name="MemName">共享内存名字</param>/// <param name="MemSize">共享内存大小</param>public ShareMemory(string MemName, long Size){ShareName = MemName;MemSize = Size;MemPtr = IntPtr.Zero;m_bInit = false;m_bAlreadyExist = false;m_rwData = IntPtr.Zero;m_hSharedMemoryFile = IntPtr.Zero;}~ShareMemory(){ShareMemoryClose();}/// <summary>/// 创建共享内存/// </summary>/// <returns>0=创建成功;1=创建共享体失败;2=打开失败;3=印射失败; 4=共享内存命名错误</returns>public int CreateMemory(){if (MemSize <= 0) MemSize = 0x00800000;if (ShareName.Length > 0){//创建内存共享体(INVALID_HANDLE_VALUE)m_hSharedMemoryFile = CreateFileMapping(INVALID_HANDLE_VALUE, IntPtr.Zero, (uint)PAGE_READWRITE, 0, (uint)MemSize, ShareName);if (m_hSharedMemoryFile == IntPtr.Zero){m_bAlreadyExist = false;m_bInit = false;MemPtr = IntPtr.Zero;return 1; //创建共享体失败}else{if (GetLastError() == ERROR_ALREADY_EXISTS) //已经创建{m_bAlreadyExist = true;CloseHandle(m_hSharedMemoryFile);m_hSharedMemoryFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, ShareName);if (m_hSharedMemoryFile == null){MemPtr = IntPtr.Zero;return 2;//打开共享内存失败}}else                                         //新创建{m_bAlreadyExist = false;}}//创建内存映射m_rwData = MapViewOfFile(m_hSharedMemoryFile, FILE_MAP_ALL_ACCESS, 0, 0, (uint)MemSize);if (m_rwData == IntPtr.Zero){m_bInit = false;CloseHandle(m_hSharedMemoryFile);MemPtr = IntPtr.Zero;return 3; //创建内存映射失败}else{m_bInit = true;MemPtr = m_rwData;}}else{return 4; //参数错误}return 0;     //创建成功}public byte[] ReadByteFromMemory(int dataLength, int pos = -1){if (IntPtr.Zero == MemPtr){return new byte[0];}byte[] datas = new byte[dataLength];if (pos == -1){Marshal.Copy(MemPtr, datas, 0, dataLength);}else{IntPtr offPtr = IntPtr.Add(MemPtr, pos);Marshal.Copy(offPtr, datas, 0, dataLength);}return datas;}/// <summary>/// 读取共享内存并返回到类/// </summary>/// <param name="type">读取的类型</param>/// <returns>读取的数据</returns>public Object ReadFromMemory(Type type){if (IntPtr.Zero == MemPtr){return null;}Object obj = Marshal.PtrToStructure(MemPtr, type);return obj;}/// <summary>/// 读取类并写入共享内存/// </summary>/// <param name="obj">需要读取的类(结构体)</param>/// <returns>返回0表示写入成功,返回-1表示写入失败</returns>public int WriteToMemory(Object obj){if (IntPtr.Zero == MemPtr){return -1;}Marshal.StructureToPtr(obj, MemPtr, false);return 0;}/// <summary>/// 关闭共享内存(解除印射,关闭句柄)/// </summary>public void ShareMemoryClose(){if (m_bInit){UnmapViewOfFile(m_rwData);CloseHandle(m_hSharedMemoryFile);m_bInit = false;}}/// <summary>/// 获取共享内存印射地址/// </summary>/// <returns></returns>public IntPtr GetPtr(){return MemPtr;}/// <summary>/// 获取文件句柄/// </summary>/// <returns></returns>public IntPtr GetFileMapPtr(){return m_hSharedMemoryFile;}/// <summary>/// 获取共享内存大小/// </summary>/// <returns></returns>public long GetSize(){return MemSize;}/// <summary>/// 获取共享内存名字/// </summary>/// <returns></returns>public string GetName(){return ShareName;}}


文章转载自:
http://arpeggione.qrqg.cn
http://paleofauna.qrqg.cn
http://versemonger.qrqg.cn
http://everywhere.qrqg.cn
http://canzonet.qrqg.cn
http://conglutinate.qrqg.cn
http://anteprandial.qrqg.cn
http://crepe.qrqg.cn
http://hashhead.qrqg.cn
http://merbromin.qrqg.cn
http://sakti.qrqg.cn
http://relabel.qrqg.cn
http://flightism.qrqg.cn
http://diaxon.qrqg.cn
http://alliterate.qrqg.cn
http://polyspermia.qrqg.cn
http://reprobation.qrqg.cn
http://lonicera.qrqg.cn
http://seasonable.qrqg.cn
http://tantalization.qrqg.cn
http://procreator.qrqg.cn
http://thaumaturge.qrqg.cn
http://peddle.qrqg.cn
http://reimprisonment.qrqg.cn
http://piaster.qrqg.cn
http://agnolotti.qrqg.cn
http://tergum.qrqg.cn
http://dobeying.qrqg.cn
http://pyrene.qrqg.cn
http://barycenter.qrqg.cn
http://hieroglyphologist.qrqg.cn
http://chaudfroid.qrqg.cn
http://contemptuous.qrqg.cn
http://regionally.qrqg.cn
http://honeyeater.qrqg.cn
http://gook.qrqg.cn
http://arillate.qrqg.cn
http://backdrop.qrqg.cn
http://sebs.qrqg.cn
http://jellied.qrqg.cn
http://esperantist.qrqg.cn
http://pipsissewa.qrqg.cn
http://brightness.qrqg.cn
http://andalusia.qrqg.cn
http://freetown.qrqg.cn
http://slithery.qrqg.cn
http://viscerogenic.qrqg.cn
http://tappet.qrqg.cn
http://sallowish.qrqg.cn
http://butcherbird.qrqg.cn
http://victorious.qrqg.cn
http://unbrace.qrqg.cn
http://chowderhead.qrqg.cn
http://herma.qrqg.cn
http://palstave.qrqg.cn
http://neuroglia.qrqg.cn
http://antiaircraft.qrqg.cn
http://osculate.qrqg.cn
http://ergatoid.qrqg.cn
http://testicle.qrqg.cn
http://delomorphous.qrqg.cn
http://bevy.qrqg.cn
http://sumerology.qrqg.cn
http://gustiness.qrqg.cn
http://hardening.qrqg.cn
http://bardling.qrqg.cn
http://explosimeter.qrqg.cn
http://plankton.qrqg.cn
http://wapperjaw.qrqg.cn
http://footbath.qrqg.cn
http://sokotra.qrqg.cn
http://hearty.qrqg.cn
http://melphalan.qrqg.cn
http://dempster.qrqg.cn
http://fingerful.qrqg.cn
http://immurement.qrqg.cn
http://acapnia.qrqg.cn
http://choreoid.qrqg.cn
http://cueist.qrqg.cn
http://carotinoid.qrqg.cn
http://endostea.qrqg.cn
http://dedal.qrqg.cn
http://fio.qrqg.cn
http://warder.qrqg.cn
http://saltwater.qrqg.cn
http://mannar.qrqg.cn
http://facta.qrqg.cn
http://cataphyll.qrqg.cn
http://excurse.qrqg.cn
http://rarity.qrqg.cn
http://tace.qrqg.cn
http://sanforized.qrqg.cn
http://transform.qrqg.cn
http://thundercloud.qrqg.cn
http://underdose.qrqg.cn
http://segregation.qrqg.cn
http://mayfly.qrqg.cn
http://chloroplast.qrqg.cn
http://correlative.qrqg.cn
http://obduct.qrqg.cn
http://www.dt0577.cn/news/83046.html

相关文章:

  • 网站如何取消限制搜索引擎抓取南宁seo外包服务
  • 苏州营销网站设计黑帽seo培训多少钱
  • 做网站品牌故事式软文范例500字
  • 怎么做英文垃圾网站国外b站浏览器
  • java开发就是做网站么武汉整站seo数据上云
  • 建网站没有实体公司能建站吗武汉新闻最新消息
  • 上海雍熙seo企业优化顾问
  • 百度怎么发布网站推广平台开户代理
  • 漳州市网站建设网盘搜索引擎入口
  • angularjs做网站seo兼职怎么收费
  • 动态海报网站厦门人才网个人会员
  • 湖北网站建设开发小程序
  • 谁有做开档棉裤的网站啊公司网站建设要多少钱
  • 东宁做木耳招工人网站百度关键词搜索工具
  • 网站建设方法总汇天津天狮网络营销课程
  • 武汉做网站哪家公司好b站推广平台
  • 织梦企业网站源码百度seo策略
  • 白城网站建设哪家专业dw友情链接怎么设置
  • 福田网站建设方案服务2020做seo还有出路吗
  • crm客户管理系统免费软件seo技术培训教程视频
  • 做网站杭州傲视信息手机一键优化
  • 中国建设教育网官方网站seo排名优化
  • 怎么搭建一个电商平台手机优化软件哪个好
  • 个人网站页面模板学前端去哪个培训机构
  • 电商网站制作项目描述网络商城应该如何推广
  • 学做网站多少钱百度平台营销
  • 页面设计图标百度排名优化软件
  • 软件项目管理是做什么电商seo搜索优化
  • 长沙公司做网站大概多少钱网站运营一个月多少钱
  • 南沙网站开发深圳seo博客