우선 가입인사를 좀 하겠습니다. 예전부터 가입하려고 햇으나 시스템 에러로 가입이 안되서 Q&A에 '나그네'로 질문을 올리던 사람입니다. 혹시나 해서 어제 시도 해봤는데. 가입이 되었습니다. 에러가 고쳐진듯합니다.
질문은 제목과 같습니다.
빌더나 델피이에는 편리하게도 C++ 의 기본 쓰레드(?)를 랩핑한 자바 쓰레드를 닮은 편리한 쓰레드 오브젝트란 클래스가 있죠..
이넘을 돌려서 쓰레드 만들었습니다. 예를 들어서 다음과 같이 코딩을 해서
Unit2.cpp : 쓰레드 클래스 (Unit2.h 는 건드린거 없음)
//---------------------------------------------------------------------------
#include
#include
#pragma hdrstop
#include "Unit2.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall ThreadClass::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
//---------------------------------------------------------------------------
__fastcall ThreadClass::ThreadClass(bool CreateSuspended)
: TThread(CreateSuspended)
{
Priority = tpTimeCritical;
}
//---------------------------------------------------------------------------
void __fastcall ThreadClass::Execute()
{
//---- Place thread code here ----
for (int i = 0 ; i < 11 ; i++)
{
printf("쓰레드 %d\n",i);
}
}
//---------------------------------------------------------------------------
Unit1.cpp : 메인 유닛(기본 쓰레드)
#include
#pragma hdrstop
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
ThreadClass *t = new ThreadClass(false);
for ( int i = 0 ; i < 11 ; i++)
{
printf("메인 %d\n",i);
}
delete t;
scanf(".");
return 0;
}
//---------------------------------------------------------------------------
이렇게 하고 실행해보면 첨부된 이미지 처럼 나옵니다.
물론 이는 C#이나 자바로 해도 마찬가지겠지요. 그래서 C#이나 자바에서 동시실행의 효과를 주기 위해 아주 잠깐 쓰레드를 아래의 메서드를 이용해서 일시정지시키는데..
C#
Thread.Sleep(1)
Java
try{
Thread.sleep(1);
}catch(InterruptException e){
...
}
C++빌더에 이 sleep 메서드 같은 기능을 하는 함수는 없나요?
원하는 결과는..
쓰레드 0
메인 0
쓰데드 1
메인1
쓰레드 2
메인2
...
...
입니다.
|