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