程序 进程 线程 初次多线程

来源:互联网 发布:山东seo服务公司 编辑:程序博客网 时间:2024/05/17 10:42

一个程序可以对应多个进程 如 记事本可以打开好多个

一个进程也可以同时访问多个程序


每个进程有独立的虚拟地址空间,不同进程内,即使使用相同内存地址实际也是不同的物理内存


进程由两部分组成

1 内核对象

2 地址空间  包含所有的可执行模块 或 DLL模块的代码和数据 还包含 栈(stack)和 堆(heap)


真正执行代码的是线程,进程只是线程的容器,一个进程可能有多个线程,第一个线程称为主线程,就是main函数


线程在进程中创建,在进程的地址空间中分配内存,供线程的栈使用.,线程可以访问进程内核对象的所有句柄.

单个进程中的多个线程之间非常容易通信

线程内存开销比进程少,因此多采用线程,避免新进程


操作系统为每一个线程安排一定的CPU时间--时间片.每个线程在自己的时间内运行,因为时间片非常短,就好像多个线程同时运行一样

如果计算机拥有多个CPU,线程就真正意义上同时运行了


//简单举例======================================================================================

#include <Windows.h>
#include <iostream>
#include <conio.h>
using namespace std;

DWORD WINAPI m_fun1Proc(LPVOID lpParameter);

void main()
{

cout<<"main thread is running"<<endl;
HANDLE hThread1;
hThread1=::CreateThread(NULL,0,m_fun1Proc,NULL,0,NULL);

for(char i='A';i<10+'A';i++)
{
cout<<i<<endl;
::Sleep(1000);
}

::CloseHandle(hThread1);
::_getch();
}

DWORD WINAPI m_fun1Proc(LPVOID lpParameter)
{
cout<<"thread1 is running"<<endl;
while(1)
{
static int x=0;
x++;
cout<<x<<endl;
::Sleep(1000);
}
return 0;
}

0 0
原创粉丝点击