Windows下用c++创建进程,再创建两个线程

在Windows下用c++编写程序,创建一个进程,包含三个线程,第一个线程执行1到100的求和,第二个执行10的阶乘计算,另一个负责将第一个和第二个线程的结果进行输出!

详细注释,源代码,还有方法说明!

第1个回答  2013-06-12
我写的代码,没编译,你试试行不行
DWORD WINAPI SumThread(LPVOID lp)//求和线程
{
int* sum=(int*)lp;
for(int i=1;i<101;i++)
{

(*sum)+=i;
}

return 0;//线程返回
}
DWORD WINAPI MulThread(LPVOID lp)//求阶乘线程
{
int* mul=(int*)lp;
for(int i=1;i<11;i++)
{

(*mul)*=i;
}
return 0;
}
DWORD WINAPI PrintThread(LPVOID lp)//打印线程
{

HANDLE handle ;

int sum=0 ;

int mul=1;

handle = CreateThread(NULL,NULL,SumThread,(LPVOID)&sum,NULL,NULL);//创建求和线程

CloseHandle(handle);//关闭线程句柄

handle = CreateThread(NULL,NULL,MulThread,(LPVOID)&mul,NULL,NULL);//创建求阶乘线程

CloseHandle(handle);//关闭线程句柄

printf("%d",sum);//打印和

printf("%d",mul);//打印阶乘

return 0;
}
void main()
{

HANDLE handle;

handle = CreateThread(NULL,NULL,PrintThread,NULL,NULL,NULL);

CloseHandle(handle);
}
第2个回答  2013-06-12
说法一:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行

说法二:进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:

简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

线程的划分尺度小于进程,使得多线程程序的并发性高。

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

说法三:多线程共存于应用程序中是现代操作系统中的基本特征和重要标志。用过UNIX操作系统的读者知道进程,在UNIX操作系统中,每个应用程序的执行都在操作系统内核中登记一个进程标志,操作系统根据分配的标志对应用程序的执行进行调度和系统资源分配,但进程和线程有什么区别呢?

进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:

线程的划分尺度小于进程,使得多线程程序的并发性搞。

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

进程(Process)是最初定义在Unix等多用户、多任务操作系统环境下用于表示应用程序在内存环境中基本执行单元的概念。以Unix操作系统为例,进程是Unix操作系统环境中的基本成分、是系统资源分配的基本单位。Unix操作系统中完成的几乎所有用户管理和资源分配等工作都是通过操作系统对应用程序进程的控制来实现的。

C、C++、Java等语言编写的源程序经相应的编译器编译成可执行文件后,提交给计算机处理器运行。这时,处在可执行状态中的应用程序称为进程。从用户角度来看,进程是应用程序的一个执行过程。从操作系统核心角度来看,进程代表的是操作系统分配的内存、CPU时间片等资源的基本单位,是为正在运行的程序提供的运行环境。进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操作系统维护的系统资源管理实体。多任务环境下应用程序进程的主要特点包括:

●进程在执行过程中有内存单元的初始入口点,并且进程存活过程中始终拥有独立的内存地址空间;

●进程的生存期状态包括创建、就绪、运行、阻塞和死亡等类型;

●从应用程序进程在执行过程中向CPU发出的运行指令形式不同,可以将进程的状态分为用户态和核心态。处于用户态下的进程执行的是应用程序指令、处于核心态下的应用程序进程执行的是操作系统指令。

在Unix操作系统启动过程中,系统自动创建swapper、init等系统进程,用于管理内存资源以及对用户进程进行调度等。在Unix环境下无论是由操作系统创建的进程还要由应用程序执行创建的进程,均拥有唯一的进程标识(PID)。

说法四:应用程序在执行过程中存在一个内存空间的初始入口点地址、一个程序执行过程中的代码执行序列以及用于标识进程结束的内存出口点地址,在进程执行过程中的每一时间点均有唯一的处理器指令与内存单元地址相对应。

Java语言中定义的线程(Thread)同样包括一个内存入口点地址、一个出口点地址以及能够顺序执行的代码序列。但是进程与线程的重要区别在于线程不能够单独执行,它必须运行在处于活动状态的应用程序进程中,因此可以定义线程是程序内部的具有并发性的顺序代码流。

Unix操作系统和Microsoft Windows操作系统支持多用户、多进程的并发执行,而Java语言支持应用程序进程内部的多个执行线程的并发执行。多线程的意义在于一个应用程序的多个逻辑单元可以并发地执行。但是多线程并不意味着多个用户进程在执行,操作系统也不把每个线程作为独立的进程来分配独立的系统资源。进程可以创建其子进程,子进程与父进程拥有不同的可执行代码和数据内存空间。而在用于代表应用程序的进程中多个线程共享数据内存空间,但保持每个线程拥有独立的执行堆栈和程序执行上下文(Context)。

基于上述区别,线程也可以称为轻型进程 (Light Weight Process,LWP)。不同线程间允许任务协作和数据交换,使得在计算机系统资源消耗等方面非常廉价。

线程需要操作系统的支持,不是所有类型的计算机都支持多线程应用程序。Java程序设计语言将线程支持与语言运行环境结合在一起,提供了多任务并发执行的能力。这就好比一个人在处理家务的过程中,将衣服放到洗衣机中自动洗涤后将大米放在电饭锅里,然后开始做菜。等菜做好了,饭熟了同时衣服也洗好了。

需要注意的是:在应用程序中使用多线程不会增加 CPU 的数据处理能力。只有在多CPU 的计算机或者在网络计算体系结构下,将Java程序划分为多个并发执行线程后,同时启动多个线程运行,使不同的线程运行在基于不同处理器的Java虚拟机中,才能提高应用程序的执行效率。本回答被网友采纳

CreateThread与AfxBeginThread (C++多线程篇 一)
在Windows系统中,每当程序运行,系统会创建一个进程。每个进程至少有一个主线程,从main函数开始执行,直到return,进程结束。主线程能创建新线程,实现多线程。多线程共享进程资源,如全局变量、句柄,同时有私有堆栈保存私有数据。CreateThread函数介绍 CreateThread是Windows API提供的一种创建新线程的函数。它...

关于C++多线程编程教学
1. 创建多线程程序:首先,先介绍一下实现多线程的具体步骤。在C++Builder中虽然用Tthread对象说明了线程的概念,但是Tthread对象本身并不完整,需要在TThread下新建其子类,并重载Execute方法来使用线程对象。在C++Builder下可以很方便地实现这一点。在C++Builder IDE环境下选择菜单File|New,在New...

如何用一个c++程序创建进程调用另一个c++程序
这里我创建了一个进程调用网易云音乐,代码如下。CreateProcess是关键 include <stdio.h>#include <windows.h>int main(int argc, char* argv[]){ \/\/创建进程 char szCommandLine[]="C:\\\\Program Files (x86)\\\\Netease\\\\CloudMusic\\\\cloudmusic.exe"; STARTUPINFO si={sizeof(si)}; PROCESS_...

用C++创建进程
DWORD WINAPI Fun1Proc(LPVOID IpParameter);DWORD WINAPI Fun2Proc(LPVOID IpParameter);void main(){ HANDLE hThread1;HANDLE hThread2;hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);hThread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);CloseHandle(hThread1);CloseHandle(hThrea...

windows下C++如何创建新进程(注意是进程不是线程)?
API CreateProcess(...) 例子MSDN上就有。include <windows.h> include <stdio.h> include <tchar.h> void _tmain( int argc, TCHAR *argv[] ){ STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory( &si, sizeof(si) );si.cb = sizeof(si);ZeroMemory( &pi, sizeof(pi) );if( ...

CreateProcess举例说明
首先,让我们通过C语言实现创建进程的代码片段。在以下代码中,我们使用了`#include `和`#include `库来访问Windows API。在主函数`main(int argc,char *argv[])`中,我们定义了一个字符数组`szCommandLine`,用于存储要启动的进程名,这里我们使用了文本编辑工具`notepad`作为示例。我们还创建了`START...

C++能不能同时创建2个窗口
可以, 只要系统能够承受, 多少个都可以了的.顺便补充下, 在Windows下, 其实很多东西实质上都是"窗口". 比如说"按钮", "对话框".某些控件, 只是长得比较奇特. 编程中都算作窗口 所以一个窗口上一般都是有蛮多的窗口的.楼主这样的代码虽然创建了多个窗口, 但是消息循环不好控制, 一般来说可以开启...

C++怎样同时进行两组程序内容
BOOL stop;SetTimer(NULL, 10086, 3000, TimerProc);\/\/ TimerProc中stop=1;while(!stop){ if(按下键) break;}

如何在C++中创建一个"Console"程序在main()函数中创建4个线程线程的...
HANDLE WINAPI CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,SIZE_T dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId);

Windows核心编程-进程
Windows使用CreateProcess函数来创建进程。这个过程包括创建进程内核对象、创建虚拟地址空间、加载可执行文件(必要的DLL)的代码和数据到进程地址空间、创建主线程的内核对象、主线程执行C\/C++运行时启动例程、调用应用程序入口函数。在进程完全初始化之前,CreateProcess函数就会返回True。终止进程有多种方式,包括...

相似回答