代码1分析:
说明:对于单核cpu的电脑来说,线程都在自己的时间片中运行,单位时间内,系统只能运行一个线程,交替运行;对于多核cpu或多cpu的电脑来说,才是真正意义上的单位时间内运行多个线程
说明:如果采用向导创建的Win32 Console程序选择的是空项目时,则以下使用方式是正确的,如果选择是”hello world”的简单应用程序时,则在main函数中想要使用输入输出流,则必须使用:
#include <iostream>
using namespace std;
#include <windows.h> //调用API函数
#include <iostream.h>
说明:程序有一个主线程,入口函数main,在主线程上可以创建新线程,入口函数定义成如下形式:
DWORD WINAPI ThreadProc1(LPVOID lpParameter); //函数声明
void main()
{
HANDLE handle=CreateThread(NULL,0,ThreadProc1,NULL,0,NULL); //创建新线程
说明:调用CloseHandle函数并没有终止新创建的线程,只是表明在主线程中对新创建的线程的引用不是很感兴趣而已,所以在没有在做什么动作之前就关闭了,这个函数在主线程运行过程中必须调用,否则即使对应线程运行结束,对应句柄也是不会关闭的,知道主线程退出时,才会由系统集中清理。
CloseHandle(handle);
cout<<"main thread is running"<<endl;
说明:如果不添加Sleep语句,主线程会在自己的时间片中运行完成后(该时间片在main函数,也就是主线程全部执行完毕后还有时间剩余),选择直接退出,主线程都退出了,依附于主线程的新线程也就不会有机会得到执行了,只有让主线程暂停执行(采用sleep函数),即挂起,让出执行的权利,操作系统会从等待的线程中选择一个来运行,那么新创建的线程得到机会执行
Sleep(10);
}
DWORD WINAPI ThreadProc1(LPVOID lpParameter)
{
cout<<"thread1 is running"<<endl;
return 0;
}
输出结果:
main thread is running
thread1 is running
代码2分析:
添加全局变量
int index=0;
将main函数中输出语句修改为:
while(index++<50)
cout<<"main thread is running"<<endl;
将线程中输出语句修改为:
while(index++<50)
cout<<"thread1 is running!"<<endl;
将main函数中sleep语句省去
则得到的结果是:
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
thread1 is running!
thread1 is running!
thread1 is running!
thread1 is running!
thread1 is running!
thread1 is running!
thread1 is running!
thread1 is running!
thread1 is running!
thread1 is running!
thread1 is running!
thread1 is running!
thread1 is running!
thread1 is running!
thread1 is running!
thread1 is running!
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
main thread is running
结果说明主线程和副线程在交替运行,也就是主线程在它的时间片运行结束后,副线程得到执行的权利,在它自己所对应的时间片中运行,此时主线程其实还没有运行结束,它将等待着副线程运行结束后继续执行
代码3分析(车票的销售):
#include <windows.h>
#include <iostream.h>
DWORD WINAPI ThreadProc1(LPVOID lpParameter);
DWORD WINAPI ThreadProc2(LPVOID lpParameter);
int ticket=50;
void main()
{
HANDLE handle1=CreateThread(NULL,0,ThreadProc1,NULL,0,NULL);
HANDLE handle2=CreateThread(NULL,0,ThreadProc2,NULL,0,NULL);
CloseHandle(handle1);
CloseHandle(handle2);
说明:为了使得主线程在退出之前保证副进程的执行完成,有些实现方法是采用恒真的空循环,单此种方法主线程会占用cpu的运行时间,如果采用Sleep