2つのテストプログラム



マルチスレッド環境で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(" 
") ; return 0 ; } DWORD WINAPI ClientThread(PVOID pvParam) { int nThreadNum = PtrToUlong(pvParam) ; for(int i = 0 ; i < 10000 ; i++) { printf(" %d %d
",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
",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
",dwNum) ; Sleep(1000) ; } return 0 ; }