2008年08月
.NET Framework 中对进程间的通讯支持不多,不过Windows API 已经为我们提供了丰富的进程间通讯的特性。我们可以使用Windows API SendMessage、PostMessage来实现windows 窗体之间的通讯。本文就是将SendMessage封装在一个窗体基类WinMsgData中,把它变成类中的一个方法以方便调用,而接收其他窗体的消息则封装成事件通知的形式提供。其中还对接收到的消息做队列处理,避免对消息发送方造成阻塞。所以只要程序中的WinForm从这个基类继承,就可以很方便的与其他的窗体进行通讯了。阅读全文>
发表于 @ 2008年08月08日 15:32:00|评论(loading...)|收藏
现在流行的进程线程同步互斥的控制机制,其实是由最原始最基本的4种方法实现的。由这4种方法组合优化就有了.Net和Java下灵活多变的,编程简便的线程进程控制手段。
这4种方法具体定义如下 在《操作系统教程》ISBN 7-5053-6193-7 一书中可以找到更加详细的解释
1临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。
2互斥量:为协调共同对一个共享资源的单独访问而设计的。
3信号量:为控制一个具有有限数量用户资源而设计。
4事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。
临界区(Critical Section)
保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子阅读全文>
发表于 @ 2008年08月08日 15:18:00|评论(loading...)|收藏
原文地址:http://blog.csdn.net/hejishan/archive/2008/03/11/2169292.aspx
VC++的共享内存操作代码实现起来相对比较容易,但是用C#语言来实现,就有一定难度,由于工作需要,把以前VC开发的共享内存代码要用C#实现,别说,还费了不少周折,毕竟C#操作API函数和地址指针不是那么直接,还好,总算完成了,效果还不错。

共享内存类:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;阅读全文>
发表于 @ 2008年08月08日 15:14:00|评论(loading...)|收藏
原文出处:http://www.wangchao.net.cn/bbsdetail_45212.html 进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:
一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方
另一个是地址空间,它包含所有的可执行模块或DLL模块的代码和数据。它还包含动态分配的空间。如线程堆栈和堆分配空间。每个进程被赋予它自己的虚拟地址空间,当进程中的一个线程正在运行时,该线程可以访问只属于它的进程的内存。属于其它进程的内存则是隐藏的,并不能被正在运行的线程访问。
为了能在两个进程之间进行通讯,由以下几种方法可供参考:
0。剪贴板Clipboard: 在16位时代常使用的方式,CWnd中提供支持
1。窗口消息 标准的Windows消息以及专用的WM_COPYDATA消息 SENDMESSAGE()接收端必须有一个窗口阅读全文>
发表于 @ 2008年08月08日 15:04:00|评论(loading...)|收藏
进程之间通讯的几种方法:
在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有
使用内存映射文件
通过共享内存DLL共享内存
使用SendMessage向另一进程发送WM_COPYDATA消息
比起前两种的复杂实现来,WM_COPYDATA消息无疑是一种经济实惠的一中方法.(ZT)
WM_COPYDATA消息的主要目的是允许在进程间传递只读数据。Windows在通过WM_COPYDATA消息传递期间,不提供继承同步方式。SDK文档推荐用户使用SendMessage函数,接受方在数据拷贝完成前不返回,这样发送方就不可能删除和修改数据:
这个函数的原型及其要用到的结构如下:
SendMessage(hwnd,WM_COPYDATA,wParam,lParam);
其中,WM_COPYDATA对应的十六进制数为0x004A
wParam设置为包含数据的窗口的句柄。lParam指向一个阅读全文>
发表于 @ 2008年08月06日 18:35:00|评论(loading...)|收藏
Net 并没有提供进程间通讯的类,其实这句话是不对的,.Net提供了强大的进程间通讯的功能,不仅可以完成本机上进程间的通讯,还可以完成网络上的任意两台计算机间的进程通讯。这些技术分别为WebService、企业级服务、.NET 远程处理,我会在后面的文章中逐步学习总结。
这里还是借助系统的功能来实现,提供一种利用发送消息的方法实现的进程间的通信。
发送方需要调用两个系统API:SendMessage与FindWindow。
非托管定义如下:
有一个解决方案,其中包括一个Windows服务和一个Windows应用程序,两者之间需要进行通信。查了下,可以使用多种方法,如Web service(适用于不同系统及跨平台情况)、.NET Remoting、消息队列、WCF(集成了前述方法的功能,但太新,不支持Windows2000及以前的系统),其中Remoting可以支持TCP、HTTP、IPC通道的通信,而IPC通道速度快,且仅能供处于同一个系统中的进程间进行通讯,而这正好符合本项目的要求,故决定采用.NET Remoting的IPC方法:
阅读全文>
发表于 @ 2008年08月06日 17:15:00|评论(loading...)|收藏
<i>Important Update: The originally presented code only works if the service is defined in the same assembly which hosts the service (because the name="" attribute in <service> may not contain the assembly name of the service). See at the end of the article for a slightly different version which works in all cases --- but which involves adding a second config file.<br></i><br>As WCF has reached RC1 stage, I find myself cleaning up a few bits of older WCF cod阅读全文>
发表于 @ 2008年08月06日 16:57:00|评论(loading...)|收藏
using System;
using System.Reflection;
namespace CExcel1
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
//创建Application对象
Excel.Application xApp=new Excel.ApplicationClass();
xApp.Visible=true;
//得到WorkBook对象, 可以用两种方式之一: 下面的是打开已有的文件
Excel.Workbook xBook=xApp.Workbooks._Open(@"D:\Sample.xls",
Missing.Value,阅读全文>
发表于 @ 2008年08月05日 00:30:00|评论(loading...)|收藏
step1.
yum python-mutagen
step2.
转到mp3文件夹
mid3iconv -e GBK *.mp3
step3.
重新打开Rhythmbox,导入mp3
阅读全文>
发表于 @ 2008年08月03日 15:56:00|评论(loading...)|收藏
<div id="post_message_1641613" style="overflow-x: hidden;">缘起<br><br>我使用linux有一段时间了,最开始和大多数人一样,使用的是redhat,后来机缘巧合之下,我需要使用gentoo帮别人解决一个问题,从此喜欢上了gentoo,并且在这只小兔子身上学习到了很多东西。后来ubuntu如火如荼的流行,周围也有一些朋友开始转换至ubuntu,在使用redhat的时候,安装软件通常等于上网寻找源代码,make和 makeinstall,使用了gentoo以后,安装软件等于emerge软件名字,这个转变当然让我觉得很爽,但是由于我只有一个很烂的旧电脑,内存也不是很强劲,我不得不总是对我的家人说:今晚要开一晚上的机器,它要工作。然后,我开始在升级和使用旧版本之间进行取舍,最终,我的gentoo变成了一个无法升级的老牛拉破车。 至今我仍认为Gentoo是非常好的linux发行版,不过,前提是你有一个很快的机器,它又一个超大的内存和强劲的CPU。ubuntu的出现让我多了一个选择,它是一个二进制的阅读全文>
发表于 @ 2008年08月03日 09:54:00|评论(loading...)|收藏
http://www.ibm.com/developerworks/cn/linux/l-initrd.html
------------------------------------------------------------------------------------------------------------------阅读全文>
发表于 @ 2008年08月03日 09:14:00|评论(loading...)|收藏