进程实作(使用.Net平台)

 参考:http://msdn.microsoft.com/library/chs/default.asp?url=/library/chs/vbcon/html/vbtskManagingProcesses.asp

今天继续看进程,并用.Net平台作几个进程的实例。


1.获得本用户的“我的文档”目录,获得当前应用程序目录(无关进程知识):

None.gif      string  myDocumentsPath  =  Environment.GetFolderPath(Environment.SpecialFolder.Personal);   // 获取当前用户“我的文档”的具体目录
None.gif
     string  CurrentPath  =  Environment.CurrentDirectory; // 获取当前应用程序目录

当然,Environment.SpecialFolder下还有好多属性选项。比如:
   

Cookies 用作 Internet Cookie 的公共储存库的目录。
Desktop 逻辑桌面,而不是物理文件系统位置。
DesktopDirectory 用于物理上存储桌面上的文件对象的目录。

不应将此目录与桌面文件夹本身混淆,后者是虚拟文件夹。

Favorites 用作用户收藏夹项的公共储存库的目录。
History 用作 Internet 历史记录项的公共储存库的目录。
InternetCache 用作 Internet 临时文件的公共储存库的目录。
LocalApplicationData 目录,它用作当前非漫游用户使用的应用程序特定数据的公共储存库。
MyComputer “我的电脑”文件夹。
MyMusic “My Music”文件夹。
MyPictures “My Pictures”文件夹。
    具体的可参考MSDN,讲得非常清楚。


2.启动某个进程:
    在.Net中启动某个进程是比较简单的事,只要创建Process对象,然后设置Process.StartInfo选项即可启动某个外部进程了。比如,我要在程序中打开某个Word文件:
None.gif Process proc  =   new  Process();
None.gifproc.StartInfo.FileName 
=   " E:\\1.doc " ;
None.gifproc.StartInfo.Vert 
=   " Open " // 这是打开,如果要打印,可以设置为"Print"即可。
None.gif
proc.StartInfo.WindowStyle  =  ProcessWindowStyle.Maximized;   // 最大化显示窗口

    当然,还有更简单的方法,都无需实例化Process对象,只需调用Process的静态方法Start即可:   

None.gif ProcessStartInfo psInfo     =      new  ProcessStartInfo();
None.gifpsInfo.FileName
= " e:\\1.doc " ;
None.gifpsInfo.Verb    
=      " Print " ;
None.gifpsInfo.WindowStyle    
=     ProcessWindowStyle.Normal;
None.gifProcess.Start(psInfo);

最简单的,Process.Start("E:\\1.doc");一句话即可调用外部进程。

3.关闭进程
    关闭进程有两种方法:
    (1)如果进程有图形界面窗口,则调用CloseMainWindow()函数。
    (2)如果是Console窗口,则调用Kill()函数。
        
    比如,上面的进程则可以这样关闭:
    process.WindowMainWindow();

    一个问题,如果持有进程的对象,则可以调用它来关闭进程,但是,我并不持有进程的对象的情况怎么办?就像第二种打开进程方法,根本就没有进程对象嘛。
    MSDN是这样解决的:

Process [] processes;
   processes = Process.GetProcessesByName("WINWORD");
   foreach(Process process in processes)
   {
    process.CloseMainWindow();
   }

4.确定进程是否正在响应:
    调用进程对象的Responding属性,如,下面程序查看Notepad.exe进程是否会响应,如是,则用CloseMainWindow关闭进程,如不会响应,则用Kill强制关闭进程:

None.gif Process[] notepads;
None.gifnotepads 
=  Process.GetProcessesByName( " Notepad.exe " );
None.gif
//  Test to see if the process is responding.
None.gif
if  (notepads[ 0 ].Responding)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif   notepads[
0].CloseMainWindow();
ExpandedBlockEnd.gif}

None.gif
else
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif   notepads[
0].Kill();
ExpandedBlockEnd.gif}

5.确定进程是否已经退出:
    调用Process的HasExit属性。则可确定进程有无退出。

6.实例:
    做了一个枚举所有进程的实例,在.net下面实现比较简单,所有的东西都给封装好了。源代码两行就可以把所有进程列举出来了。
    (1)列举所有进程,显示在ComboBox类型的CBProcesses对象中。
   

None.gif CBProcesses.Items.Clear();
None.gifProcess[] processes;
None.gifprocesses     
=  Process.GetProcesses();
None.gif
foreach (Process process  in  processes)
ExpandedBlockStart.gif
{
InBlock.gif     CBProcesses.Items.Add(process.ProcessName);
ExpandedBlockEnd.gif}

    (2)进程地址空间中加载了很多模块(即DLL,EXE文件),把它们列举出来。放在ListBox类型的LBProcesses中:

None.gif          private   void  CBProcesses_SelectedIndexChanged( object  sender, System.EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif     
{
InBlock.gif            
//显示进程的模块的信息
InBlock.gif
            LBProcesses.Items.Clear();
InBlock.gif            Process[] process    
= Process.GetProcessesByName(CBProcesses.Items[CBProcesses.SelectedIndex].ToString());
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
foreach(ProcessModule aModule in process[0].Modules)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    LBProcesses.Items.Add(aModule.ModuleName
+' '+aModule.FileName);
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif      }

(3)显示进程的一些详细信息:
        这个都是调用Process对象中的一些方法,以获得其信息,MSDN中有详细介绍,需要时可翻MSDN: 
   

None.gif string  ProcPID = " PID(进程标识符): " + process[ 0 ].Id.ToString();   // 进程标识符
None.gif
string  ProcCPU = " CPU使用总时间: " + process[ 0 ].TotalProcessorTime.TotalMinutes.ToString() + " 分钟 " // CPU使用,以分钟表示
None.gif
string  ProcCPUTime     = " 获得此时间用户的CPU时间: " + process[ 0 ].UserProcessorTime.TotalMinutes.ToString() + " 分钟 " // CPU时间,以分钟表示
None.gif
string  ProcMemory     = " 内存使用: " + (process[ 0 ].WorkingSet / 1024 ).ToString() + "  KB "
None.gif
string  ProcPriority = " 优先级: " + process[ 0 ].BasePriority.ToString();
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值