windows核心编程~

aaaa3105563 2010-05-18 05:54:47
请问一下Win32控制台程序是不是也是像Win32程序一样有一个进程和一个主线程的概念?

有一次听见别人说Win32控制台程序没有线程,代码是在进程中运行的,但是进程不是不活波的吗,所有的代码不是都要线程来执行吗,所以不是很理解


还有一个关于核心编程的问题,就是windows核心编程书中有的地方写一但进程启动,就会先调用C\C++运行期库,然后进入应用程序入口点,当进入点返回时,再调用C\C++运行期库的exit函数清理完再退出程序

还有主线程是什么时候创建的,是先创建主线程呢,还是先调用C\C++运行期库在创建主线程进入程序入口函数,还是先创建主线程再调用C\C++运行期库,如果先调用C\C++运行期库,那这些运行期库的函数的代码在哪里运行的啊

因为书中也有的地方写主线程和C\C++运行期库一起运行,越看越郁闷。。。汗~

答得好的就拿100分~ 谢谢 ^-^
...全文
191 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liutengfeigo 2010-05-18
  • 打赏
  • 举报
回复
没线程可以工作?
mzlogin 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cattycat 的回复:]

进程不管是win32的还是console的都有个主线程,当你再createthread创建你自己的线程后,就是多线程了,所以多线程也可以是在控制台下的。
[/Quote]

UP~
o老猫钓鱼o 2010-05-18
  • 打赏
  • 举报
回复
jf................
cattycat 2010-05-18
  • 打赏
  • 举报
回复
进程不管是win32的还是console的都有个主线程,当你再createthread创建你自己的线程后,就是多线程了,所以多线程也可以是在控制台下的。
ClassDan 2010-05-18
  • 打赏
  • 举报
回复
第1个问题:Win32控制台程序(CUI)和Win32窗口程序(GUI)一样也进程和主线程的概念。代码是不可能以进程的形式运行的。

第2个问题:用图来表达可能更清楚一些,可惜我不会上传图片。

CreateProcess创建一个进程 → CreateThread创建一个主线程 → RtlUserThreadStart函数 → C/C++运行库启动代码 → 主线程入口点函数 → ...... (还有主线程入口函数返回及资源清理那一部分线路,没法“画”出来)

其中RtlUserThreadStart函数是NTDLL.dll模块导出的。它是每个线程开始执行时实际的“入口函数”,然后才是调用线程的线程函数(即CreateThread中指示的函数)。

C/C++运行库启动函数:WinMainCRTStartup(GUI+ANSI)、wWinMainCRTStartup(GUI+Unicode)、mainCRTStartup(CUI+ANSI)、wmainCRTStartup(CUI+Unicode)。调用过程代码如下:
GetStartupInfo(&StartupInfo);
int nMainRetVal=wWinMain((HINSTANCE)&__ImageBase,NULL,pszCommandLineUnicode,
(StartupInfo.dwFlags & STARTF_USESHOWWINDOW)?StartupInfo.wShowWindow:SW_SHOWDEFAULT);
buptzwp 2010-05-18
  • 打赏
  • 举报
回复
4L说的就可以。
wade_2003 2010-05-18
  • 打赏
  • 举报
回复
帮顶~~~~~~~~~
GingerJWS 2010-05-18
  • 打赏
  • 举报
回复
请问一下Win32控制台程序是不是也是像Win32程序一样有一个进程和一个主线程的概念?
一样,只是多了一个控制台窗口,你也可以像普通的win32程序那样创建窗口及消息循环。

有一次听见别人说Win32控制台程序没有线程,代码是在进程中运行的,但是进程不是不活波的吗,所有的代码不是都要线程来执行吗,所以不是很理解
这个说话你错误的,你的理解是正确。我估计它原来的意思可能是DOS程序(非控制台程序)是在模拟器进程中运行的


还有一个关于核心编程的问题,就是windows核心编程书中有的地方写一但进程启动,就会先调用C\C++运行期库,然后进入应用程序入口点,当进入点返回时,再调用C\C++运行期库的exit函数清理完再退出程序
还有主线程是什么时候创建的,是先创建主线程呢,还是先调用C\C++运行期库在创建主线程进入程序入口函数,还是先创建主线程再调用C\C++运行期库,如果先调用C\C++运行期库,那这些运行期库的函数的代码在哪里运行的啊
因为书中也有的地方写主线程和C\C++运行期库一起运行,越看越郁闷。。。汗~

主线程是操作系统帮你创建的,如果是C/C++程序,主线程的入口点就在 “C\C++运行期库” 中,“C\C++运行期库”会做准备工作,再调用你的main函数
jackyjkchen 2010-05-18
  • 打赏
  • 举报
回复
仔细看Windows核心编程,我不清楚你怎么会得出控制台没有线程一说
  • 打赏
  • 举报
回复
WINDOWS平台上就有多线程,,,一个进程最少有一个线程...
linyilong3 2010-05-18
  • 打赏
  • 举报
回复
先创建进程,再进入入口,我自己猜的,那个控制台也是有线程的

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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