|
안녕하세요 토요일 점심이 다와가네요 식사들 하셧습니까...
프로그램 삼매경에 빠져있는 초짜 입니다.
시리얼 통신프로그램을 하나 만들엇구요.. 기존엔 타이머로 구현을 하였습니다.
근데 주기가 일정치 않고 통신도 자주 문제가 발생하여서 쓰레드로구현하면
안정적으로 통신 할수있다 생각되어 Thread를 구현할려고 합니다.
게시판 글 찾다보니 김태선님 소스가 눈에 보이더군요... 잘 이해는 안되지만 일단 구현은 쉽게 되었습니다.
소스를 아래와 같습니다. 그대로 카피 하였습니다.
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
class CCrazy : public TThread
{
int Index;
int Count;
public:
__fastcall CCrazy(int index, bool CreateSuspended) : TThread(CreateSuspended)
{
Index = index;
Count = 0;
FreeOnTerminate = true;
}
void __fastcall Execute()
{
while(!Terminated)
{
char msg[100];
wsprintf(msg, "[#%d] The Thread has number %d", Index, Count);
Form1->Memo1->Lines->Add(msg);
Sleep(1);
Count++;
if (Count > 1000)
{
Terminate();
}
}
}
};
for(int c = 0; c < 10; c++)
new CCrazy(c, false); // 테스트 쓰레드 10개 동시 기동
}
//---------------------------------------------------------------------------
일단 제가 몇가지 수정을 해보겠습니다.
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
class CCrazy : public TThread
{
int Index;
int Count;
public:
__fastcall CCrazy(int index, bool CreateSuspended) : TThread(CreateSuspended)
{
Index = index;
Count = 0;
FreeOnTerminate = true;
}
void __fastcall Execute()
{
while(!Terminated)
{
char msg[100];
wsprintf(msg, "[#%d] The Thread has number %d", Index, Count);
Form1->Memo1->Lines->Add(msg); 메모장 출력
Sleep(1);
Count++;
/*if (Count > 1000)
{
Terminate(); // 스레드는 프로그램이 구동되고 있는이상 절대 꺼지지 않습니다 ^^
}
*/
}
}
};
new CCrazy(c, false); //쓰레드를 하나만 구현합니다.
}
이렇케 구현하니까 일단 통신은 되더군요..
저는 이렇케 해보고 싶습니다.
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
new CCrazy(c, false); //쓰레드를 하나만 구현합니다.
}
//---------------------------------------------------------------------------
안되더군요 ㅜㅜ 어떻게 해야 켤수 있나요?
제가 쓰레드를 끄는 코드 인 Terminate();를 삭제 하였습니다.
나중에 어떻게 끄죠????.......
저것들을 헤더 파일에 넣고
Form1에서 켜고 끄고 하고싶어요
그리고 저 프로그램을 저대로 쓰는게 문제는 없는건가요?
고수 분들의 고견을 듣습니다.
도움 부탁드립니다.
|