下面是个比较经典的例子
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
#include <conio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#include <math.h>
#include <io.h>
#include <fcntl.h>
#define MAX_THREADS 3
int terminate_threads=0;
int active_threads=0;
DWORD WINAPI Printer_Thread(LPVOID data);
DWORD WINAPI Printer_Thread(LPVOID data){
for (;;)
{
printf("%d",(int)data+1);
Sleep(100);
if(terminate_threads)//主线程通知要结束
break;
}
if(active_threads>0)//通过主线程是否子线程处理完毕
active_threads--;
return (DWORD)data;
}
void main(void){
HANDLE thread_Handle[MAX_THREADS];
DWORD thread_id[MAX_THREADS];
printf("/nStarting all thread.../n");
for(int index=0;index<MAX_THREADS;index++){
thread_Handle[index]=CreateThread(NULL,
0,
Printer_Thread,
(LPVOID)index,
0,
&thread_id[index]);///创建线路
active_threads++;
}
for(index=0;index<75;index++){
printf("4");
Sleep(100);
}
while(!kbhit());//当没有键按下 是非阻塞函数
getch(); //在执行时,检测按下什么键,如果不按键该函数不返回;是阻塞函数
terminate_threads=1;
while(active_threads);
for(index=0;index<MAX_THREADS;index++){//指定句柄无效
CloseHandle(thread_Handle[index]);
}
printf("/nALL threads teminated./n");
}