突然发现:MFC中有线程类,但没有进程类,为什么要这样设计呢?

eivanlee 2003-09-12 05:13:05
CWinThread,代表一个线程;
CWinApp,代表应用程序的主线程;
为什么没有CWinProcess,代表一个进程呢???
...全文
117 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinzhaohui 2003-09-13
  • 打赏
  • 举报
回复
在Win32API函数建立进程为
进程的创建

调用 CreateProcess函数创建新的进程,运行指定的程序。CreateProcess的原型如下:


BOOL CreateProcess(

LPCTSTR lpApplicationName,

LPTSTR lpCommandLine,

LPSECURITY_ATTRIBUTES lpProcessAttributes,

LPSECURITY_ATTRIBUTES lpThreadAttributes,

BOOL bInheritHandles,

DWORD dwCreationFlags,

LPVOID lpEnvironment,

LPCTSTR lpCurrentDirectory,

LPSTARTUPINFO lpStartupInfo,

LPPROCESS_INFORMATION lpProcessInformation

);

其中:

lpApplicationName 指向包含了要运行模块名字的字符串。


lpCommandLine 指向命令行字符串。


lpProcessAttributes 描述进程的安全性属性,NT下有用。


lpThreadAttributes 描述进程初始线程(主线程)的安全性属性,NT下有用。


bInHeritHandles 表示子进程(被创建的进程)是否可以继承父进程的句柄。可以继承的句柄有线程句柄、有名或无名管道、互斥对象、事件、信号量、映像文件、普通文件和通讯端口等;还有一些句柄不能被继承,如内存句柄、DLL实例句柄、GDI句柄、URER句柄等等。


子进程继承的句柄由父进程通过命令行方式或者进程间通讯( IPC)方式由父进程传递给它。


dwCreationFlags 表示创建进程的优先级类别和进程的类型。创建进程的类型分控制台进程、调试进程等;优先级类别用来控制进程的优先级别,分Idle、Normal、High、Real_time四个类别。


lpEnviroment 指向环境变量块,环境变量可以被子进程继承。


lpCurrentDirectory 指向表示当前目录的字符串,当前目录可以继承。


lpStartupInfo 指向StartupInfo结构,控制进程的主窗口的出现方式。


lpProcessInformation 指向PROCESS_INFORMATION结构,用来存储返回的进程信息。


从其参数可以看出创建一个新的进程需要指定什么信息。

从上面的解释可以看出,一个进程包含了很多信息。若进程创建成功的话,返回一个进程信息结构类型的指针。进程信息结构如下:

typedef struct _PROCESS_INFORMATION {

HANDLE hProcess;

HANDLE hThread;

DWORD dwProcessId;

DWORD dwThreadId;

}PROCESS_INFORMATION;


进程信息结构包括进程句柄,主线程句柄,进程 ID,主线程ID。

yinzhaohui 2003-09-12
  • 打赏
  • 举报
回复
要产生进程类也不是不可,在Linux下就可以在一个主进程中产生子进程,也可以在进程中产生线程。单独的进程是不能执行的,因此在一个进行中至少有一个线程,当产生一进程时同时产生一个这个进程的线程叫主线程,在Linux下产生进程的同时也是产生了线程的。因为线程才是调度单元
sandrowjw 2003-09-12
  • 打赏
  • 举报
回复
线程是调度单元,进程是资源分配单元。在一般的应用程序中控制进程没有什么意义,因为进程内部只能看见自己的地址空间,所有工作都是(看上去)自然而然的,进程之间本身就需要这种保护机制。
xiaohyy 2003-09-12
  • 打赏
  • 举报
回复
一个进程至少包含一个线程,线程是基本单位
mastercy 2003-09-12
  • 打赏
  • 举报
回复
你的程序不就是一个进程吗???
lengnuan 2003-09-12
  • 打赏
  • 举报
回复
你牛!

先仔细考虑一下啥叫做"进程". 再问这个问题
ypos 2003-09-12
  • 打赏
  • 举报
回复
线程才是运行的单位,你是不是想专门做一个CWinProcess来放资源啊:)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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