// WndThread.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "windows.h" #include "conio.h" #include "stdlib.h" char *g_pszText1=NULL; //TlS 避免了同时多个线程 操作一个变量时引起的混乱,有了TLS多个线程操作一个变量会先复制一个变量出来操作 __declspec(thread) char *g_pszText2=NULL; void Print(){ //printf("Text1: %s\n",g_pszText1); printf("Text2: %s\n",g_pszText2); } //线程三输出 这个输出规律会乱套 以后避免 //原因是因为多个线程多对一个变量进行操作 所以造成了变了的混乱 DWORD WINAPI PrintProc(LPVOID pParam){ char * psText=(char *) pParam; //g_pszText1 分配内存 g_pszText1=(char *)malloc(100); memset(g_pszText1,0,100); strcpy(g_pszText1,psText); //g_pszText2 分配内存 g_pszText2=(char *)malloc(100); memset(g_pszText2,0,100); strcpy(g_pszText2,psText); while(1){ Print(); Sleep(1000); } } //线程一输出 DWORD WINAPI ThreadProcl(LPVOID pParam){ DWORD nValue=(DWORD)pParam; for(int i=0;i<=100;i++){ printf("Thread Procl----------%d\n",i); //Sleep(1000); } return 0; } //线程二输出 DWORD WINAPI ThreadProcl2(LPVOID pParam){ while(1){ printf("----------Thread Procl\n"); Sleep(1000); } return 0; } void CreateThreads(){ char szText1[]="Thread 1--------"; DWORD nThreadID=0; HANDLE hThread=CreateThread(NULL,0,PrintProc, szText1,0,&nThreadID); char szText2[]="--------Thread 2--------"; hThread=CreateThread(NULL,0,PrintProc, szText2,0,&nThreadID); char szText3[]="--------Thread 3--------"; hThread=CreateThread(NULL,0,PrintProc, szText3,0,&nThreadID); getch(); } void Create() { DWORD nValue=100; DWORD nThreadID=0; //第三参数 线程创建执行函数 第四 函数参数 //第五 线程创建方式如果CREATE_SUSPENDED 那就是创建线程但是不马上执行 先挂起 //第六线程创建ID HANDLE hThread=CreateThread(NULL,0,ThreadProcl, (LPVOID)nValue,CREATE_SUSPENDED,&nThreadID); printf("Thread1 ID:%d\n",nThreadID); printf("Thread1 Handle:%p\n",hThread); //吧线程1的状态从挂起 转为执行 ResumeThread(hThread); //等待线程1的结束 WaitForSingleObject(hThread,INFINITE); HANDLE hThread1=CreateThread(NULL,0,ThreadProcl2, NULL,0,&nThreadID); printf("Thread2 ID:%d\n",nThreadID); printf("Thread2 Handle:%p\n",hThread1); //挂起线程2 执行线程1 //SuspendThread(hThread1); //SuspendThread 挂起线程 //ResumeThread 执行线程 //WaitForSingleObject 等候线程的结束 //关闭线程句柄 CloseHandle(hThread); } int main(int argc, char* argv[]) { //创建线程 //Create(); CreateThreads(); getch(); return 0; }