// 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
最新推荐文章于 2020-06-17 15:04:16 发布