转:-------
多线程可以给程序实现许多的功能,并且多个函数同时进行有效地提高了程序的运行效率。这篇文章讲的就是VC控制台下的多线程操作。本文章还得感谢《VC+API常用函数简单例子大全》的作者,。
首先我们要用到CreateThread函数,以下是函数原型:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
它有六个参数, 第一个参数不用管它,填 NULL ,第二个参数 dwStackSize 用于新线程的初始堆栈大小,默认为 0 ,第三个 lpStartAddress 填函数名(指标),但这个函数必须是这种固定格式的 DWORD _stdcall ThreadProc(LPVOID lpParameter), 新的线程将会执行这个函数里面的代码,直到函数结束,线程退出。第四个 lpParameter 是一自定义参数,用户可以通过这个参数,传递需要的类型,这个参数与线程函数的参数相对应。第五个 dwCreationFlags 填 0 表示立即执行,如果是 CREATE_SUSPENDED 表示挂起,直到用 ResumeThread 函数唤醒。第六个 lpThreadId 填 NULL 就行了。
例子:
#include <stdio.h>
#include <windows.h>
DWORD _stdcall ThreadProc(LPVOID lpParameter)//线程执行函数{ int si=100; while(si>0) { printf("子线程输出数字:%d\n",si--); Sleep(1000); } return 0;}
int main(){ int mi=0; CreateThread(NULL,0,ThreadProc,NULL,0,NULL);//创建一个线程,去执行ThreadProc函数 while(mi<100) { printf("主线程输出数字:%d\n",mi++); Sleep(1000); } return 0;}
对其进行简单修改完成了双线程:
#include <stdio.h>
#include <windows.h>DWORD _stdcall ThreadProc1(LPVOID lpParameter)//线程执行函数{ int si=100; while(1) { //printf("子线程输出数字:%d\n",si--); printf("1"); } return 0;}DWORD _stdcall ThreadProc2(LPVOID lpParameter)//线程执行函数{ while(1) {
printf("2");
}
return 0;}int main(){ int mi=0; while (mi<100) { CreateThread(NULL,0,ThreadProc1,NULL,0,NULL);//创建1个线程,去执行ThreadProc1函数 CreateThread(NULL,0,ThreadProc2,NULL,0,NULL);//创建2个线程,去执行ThreadProc2函数
printf("主线程输出数字:%d\n",mi++);
Sleep(100); }
return 0;
}