为什么要用CreateProcess创建进程 新手问题:我看某些程序里面通过CreateProcess创建进程,觉得有些不解。普通的winmain函数在执行的时候,OS会自动给它创建进程和主线程,为什么要自己创建进程了,这个和运行时系统创建的进程有什么关系? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有时候希望在自己的程序中启动一个外部的程序就要用CreateProcess啊。比如,你在对话框中有一个按钮,你希望一点这个按钮,QQ就运行了,那你就要用CreateProcess啊。这个和运行时系统创建的进程有什么关系?=================最大的不同应该是父进程不同吧。 通过CreateProcess创建进程可以得到进程句柄从而施行控制 如果什么都是系统去执行的,不用CreateProcess,你程序怎么自动执行一个新进程呢? OS也是调用CreateProcess创建进程。 貌似听说createprocess会有内存泄露问题,要用_beginthreadex? _beginthreadex还是调用createprocess,但做了一些初始化的工作。 _beginthreadex 调用createprocess。CreateThread吧 楼上说的对, _beginthreadex调用CreateThreadCreateThread函数是用来创建线程的Windows函数。不过,如果你正在编写C/C++代码,决不应该调用CreateThread。相反,应该使用Visual C++运行期库函数_beginthreadex。如果不使用Microsoft的Visual C++编译器,你的编译器供应商有它自己的CreateThred替代函数。 若要使多线程C和C++程序能够正确地运行,必须创建一个数据结构,并将它与使用C/C++运行期库函数的每个线程关联起来。当你调用C/C++运行期库时,这些函数必须知道查看调用线程的数据块,这样就不会对别的线程产生不良影响。 1.每个线程均获得由C/C++运行期库的堆栈分配的自己的tiddata内存结构。 2.传递给_beginthreadex的线程函数的地址保存在tiddata内存块中。传递给该函数的参数也保存在该数据块中。 3._beginthreadex确实从内部调用CreateThread,因为这是操作系统了解如何创建新线程的唯一方法。 4.当调用CreatetThread时,它被告知通过调用_threadstartex而不是pfnStartAddr来启动执行新线程。还有,传递给线程函数的参数是tiddata结构而不是pvParam的地址。 5.如果一切顺利,就会像CreateThread那样返回线程句柄。如果任何操作失败了,便返回NULL。 _beginthreadex和_beginthread函数的区别。_beginthread函数的参数比较少,因此比特性全面的_beginthreadex函数受到更大的限制。 例如,如果使用_beginthread,就无法创建带有安全属性的新线程,无法创建暂停的线程,也无法获得线程的ID值。 运行不成功,求助 关于createthread传递参数的问题 LPCRECT类型 vc中非模态对话如何访问主对话框中的成员 通过vc编程修改注册表能否在开机的时候启动隐藏的一个控制台应用程序~~~ 谁能看懂这段代码??? afxDump的疑问? 驱动安装程序用createprocess打开后遇到问题 阅读代码的方法,那种最好??? 为什么内存位图的数据指针为0 如何在主对话框获取子对话框上控件的值? 帮忙 “Run-Time Check Failure #2 - Stack around the variable 'bmpinfo' was corrupted.”
=================
最大的不同应该是父进程不同吧。
OS也是调用CreateProcess创建进程。
_beginthreadex还是调用createprocess,但做了一些初始化的工作。
CreateThread吧
若要使多线程C和C++程序能够正确地运行,必须创建一个数据结构,并将它与使用C/C++运行期库函数的每个线程关联起来。当你调用C/C++运行期库时,这些函数必须知道查看调用线程的数据块,这样就不会对别的线程产生不良影响。
1.每个线程均获得由C/C++运行期库的堆栈分配的自己的tiddata内存结构。
2.传递给_beginthreadex的线程函数的地址保存在tiddata内存块中。传递给该函数的参数也保存在该数据块中。
3._beginthreadex确实从内部调用CreateThread,因为这是操作系统了解如何创建新线程的唯一方法。
4.当调用CreatetThread时,它被告知通过调用_threadstartex而不是pfnStartAddr来启动执行新线程。还有,传递给线程函数的参数是tiddata结构而不是pvParam的地址。
5.如果一切顺利,就会像CreateThread那样返回线程句柄。如果任何操作失败了,便返回NULL。
_beginthreadex和_beginthread函数的区别。_beginthread函数的参数比较少,因此比特性全面的_beginthreadex函数受到更大的限制。
例如,如果使用_beginthread,就无法创建带有安全属性的新线程,无法创建暂停的线程,也无法获得线程的ID值。