线程创建、挂起、执行 TLS等14.4.28

// 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;
}

你可能感兴趣的:(线程创建、挂起、执行 TLS等14.4.28)