两个测试程序

 

本来是想测试一下在多线程环境下printf多次输出的情况,验证一下自己的想法,结果自己的测试程序貌似有问题,测试不出来.....先记下如何创建线程,减少烦人的编译错误先

 

/*	-----------------------------------------------------------------------------------
	这个是用_beginthreadex创建线程的。

	-----------------------------------------------------------------------------------	*/

//#define   _WIN32_WINNT   0x0400 

#include<windowsx.h>//里面竟然不包括windows.h
#include<windows.h> //为什么不支持Windowsx.h
#include<stdio.h>
#include<process.h>





typedef unsigned (__stdcall *PTHREAD_START ) (void *)  ;

#define chBEGINTHREADEX(psa,cbStackSize,pfnStartAddr,			\
		pvParam,dwCreateFlags,pdwThreadId)						\
		((HANDLE)_beginthreadex(								\
								(void*)(psa),					\
								(unsigned)(cbStackSize),		\
								(PTHREAD_START) (pfnStartAddr),	\
								(void *)(pvParam),				\
								(unsigned)(dwCreateFlags),		\
								(unsigned *)(pdwThreadId)))		


DWORD WINAPI ClientThread(PVOID  pvParam) ;


int main(void)
{	

	DWORD nThreadNum ;

	HANDLE hThread[5] ;


	for(int i = 0 ; i < 5 ; i++)
	{

		hThread[i] = chBEGINTHREADEX(NULL,0,ClientThread,i+1,0,&nThreadNum)  ;
	}


	WaitForMultipleObjects(5,hThread,TRUE,INFINITE) ;

	for(int j = 0 ; j < 5 ; j++)
	{
		CloseHandle(hThread[j]) ;
	}

	printf("程序结束\n") ;

	return 0 ;
}


DWORD WINAPI ClientThread(PVOID  pvParam)
{
	int nThreadNum = PtrToUlong(pvParam) ;

	for(int i = 0 ; i < 10000 ; i++)
	{
		printf("第%d线程第%d循环\n",nThreadNum,i+1) ;

		Sleep(5000) ;
	}


	return 0 ;
}


 

 

/*	--------------------------------------------------------------------------------
	这个是用CreateThread创建的线程
	--------------------------------------------------------------------------------	*/


#include<windows.h>
#include<stdio.h>

DWORD WINAPI ThreadFun(PVOID pvParam) ;

int main(void)
{
	DWORD dwThreadId = 0 ;
	int nNum = 0 ;
	int i = 0 ;

	nNum = 2 ; 
	CreateThread(NULL,0,ThreadFun,(PVOID)&nNum,0,&dwThreadId) ;

	Sleep(100) ;
	for(i = 0 ; i < 10000 ; ++i)
	{
		printf("ThreadNum : %d\n",1) ;
		Sleep(1000) ;
	}

	return 0 ;
}


DWORD WINAPI ThreadFun(PVOID pvParam) 
{
	DWORD i = 0 ;
	DWORD dwNum = *((int *)pvParam) ;

	for(i = 0 ; i < 10000 ; ++i)
	{
		printf("ThreadNum : %d\n",dwNum) ;
		Sleep(1000) ;
	}

	return 0 ;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值