여러 쓰레드에 랜덤시드 뿌릴 때의 문제점 좀 도와주세요.

jzqioipst의 이미지

쓰레드에 랜덤시드 뿌려주는데 계속 모두 동일한 랜덤값만을 취하게 되네요.
srand(time(NULL))을 srand(GetTickCount())로 바꾸어 보아도 안 되고
쓰레드를 생성하고 나서 다음 쓰레드 생성전에 Sleep()을 걸어주어도 그 걸어준 시간차 만큼의 간격으로 동시에 끝나네요.
왜이러는 걸까요?
그리고 어떻게 해결할 수 있을까요?

// test.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//

#include "stdafx.h"
#include
#include

void RunGame(int a)
{
int cnt = rand()%200;

for(int i=0; i {
printf("%c", a);
Sleep(500);
}

printf("\n%c가 종료되었습니다.\n", a);
}

DWORD WINAPI MyProc(LPVOID para)
{
int a;
a = (int)para;

RunGame(a);

return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
srand(GetTickCount());

HANDLE hT[40];

for(int i=0; i<25; i++)
{
hT[i] = CreateThread(NULL, 0, MyProc, (LPVOID)(65+i), 0, NULL);
Sleep(10);
}

Sleep(100000);

return 0;
}

jzqioipst의 이미지

// test.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
 
#include "stdafx.h"
#include <Windows.h>
#include <time.h>
 
 
 
void RunGame(int a)
{
	int cnt = rand()%200;
 
	for(int i=0; i<cnt; i++)
	{
		printf("%c", a);
		Sleep(500);
	}
 
	printf("\n%c가 종료되었습니다.\n", a);
}
 
 
DWORD WINAPI MyProc(LPVOID para)
{
	int a;
	a = (int)para;
 
	RunGame(a);
 
	return 0;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
	srand(GetTickCount());
 
	HANDLE hT[40];
 
	for(int i=0; i<25; i++)
	{
		hT[i] = CreateThread(NULL, 0, MyProc, (LPVOID)(65+i), 0, NULL);
		Sleep(10);
	}
 
	Sleep(100000);
 
	return 0;
}