C++の練習がてら、スレッド用のクラスを作っています。
#pragma once
#include <process.h>
#include <d3dx9.h>
[CThread.h]
class CThread
{
public:
CThread(void);
virtual ~CThread(void);
unsigned int Create( void* funcAdr );
HRESULT Close(void);
private:
HANDLE hThread;
};
#include "Thread.h"
CThread::CThread(void)
{
hThread = NULL;
}
CThread::~CThread(void)
{
}
unsigned int CThread::Create(void *func)
{
unsigned int threadId;
hThread = (HANDLE)_beginthreadex(NULL, 0, (unsigned int(__stdcall*)(void*))func, NULL, 0, &threadId);
if(hThread == 0)
return 0;
return (unsigned int)hThread;
}
HRESULT CThread::Close(void)
{
BOOL successClose;
if(hThread != NULL)
{
WaitForSingleObject(hThread, INFINITE);
successClose = CloseHandle(hThread);
}
else{
return E_FAIL;
}
if(!successClose)
return E_FAIL;
return S_OK;
}
#include <cstdio>
#include "Thread.h"
unsigned int _stdcall thread(void);
int main(void)
{
CThread thread;
HANDLE hThread;
hThread = (HANDLE)thread.Create(api);
for(int i= 0; i<100; i++)
printf("メイン\n");
thread.Close();
}
unsigned int __stdcall thread(void)
{
int i=0;
for(i=0; i<20; i++)
printf("私がサブスレッドだ!!!!\n");
return 0;
}
試しにクラスを使わずにやってみると、バラバラに表示されました。
スレッドの動く順番というのは、一体何で決定されているのでしょうか?
また、クラスを使った方では、なぜスレッドが同時実行されていないような動きをしたのでしょうか?