|
안녕하세요...
Thread를 써서 통신을 많이해 보았는데
아래 내용과 같이 사용하면 이상이 없을 겁니다.
원인은 처음에 발생한 Thread1이 CPU의 점유율을 모두 차지 하고 있기 때문입니다.
이렇게 되면 다음에 발생된 Thread2...Threadn까지 모두 Thread1이 CUP의 점유율을
나누어 주기전까지는 거의 동작을 목하고 마는 상태가 됩니다.
아래 간단한 Source입니다.
//========================
// ThreadTest.h
//========================
#ifndef ThreadTestH
#define ThreadTestH
//---------------------------------------------------------------------------
#include <Classes.hpp>
//---------------------------------------------------------------------------
class ThreadTest : public TThread
{
private:
protected:
void __fastcall Execute();
int Thread_Port;
int Th_Max_Error_Cnt;
public:
__fastcall ThreadTest::ThreadTest(const int mPort);
};
//---------------------------------------------------------------------------
#endif
//==========================
// ThreadTest.cpp
//==========================
//---------------------------------------------------------------------------
__fastcall ThreadTest::ThreadTest(const int mPort) : TThread(false)
{
// Port Number를 Setting한다.
Thread_Port = mPort;
}
//---------------------------------------------------------------------------
void __fastcall ThreadTest::Execute()
{
int Errcount;
BYTE TX_Buffer[1024]; //수신 Buffer
BYTE RX_Buffer[1024]; //송신 Buffer
Errcount = 0;
while(!Terminated)
{
while(1)
{
if (Terminated) break;
if (Th_Max_Error_Cnt < Errcount) {
// Form에 Error를 Display 한다.
break;
}
//
ZeroMemory(Tx_Buffer, sizeof(Tx_Buffer));
ZeroMemory(Rx_Buffer, sizeof(Rx_Buffer));
memcpy(Tx_Buffer, "12345678901234567890", 20);
RetByte = COM_Write(Thread_Port, Tx_Buffer, 20);
if (RetByte == 0x00) { // Return OK인 경우
//Form에 Status Display
Errcount = 0;
} else {
// Error Display
Errcount++;
}
Sleep(200);
// Thread에서 가장 중요함 Sleep을 주는 이유는 PC CPU의 Task의 시간을
// 다른 쪽으로 주기위하여 1/5초를 Sleep해 주는 것이 가장 적당 하다.
// NT인 경우 Task Manager를 보면 CPU점유율이 10%이상을 넘어가지
// 않을 것으로 본다.
}
break;
}
if (IsOpened(Thread_Port) == true) {
COM_Close(Thread_Port);
}
FreeOnTerminate = false;
if (!Terminated) {
Terminate();
}
}
왕족 님이 쓰신 글 :
: 답변 감사합니다.
:
: 역시 전 초보군요....
: 제가 가진 책에는 "수행속도" 관한 내용이 없습니다.
: 그냥 똑같이 돌아가도록 하고 싶은데...어떻게 하죠?
:
:
: 조재영 님이 쓰신 글 :
: : 쓰레드에는 수행속도 등급이 있습니다.
: : 등급을 잘 조정해 보세요.
: :
: :
: :
: : 왕족 님이 쓰신 글 :
: : : 초보가 드디어 실무용 프로그램에 도전했습니다.
: : : 그런데...
: : :
: : : 현재: COM1 읽고쓰고 하는 쓰레드 처리
: : : COM2 읽기만 하는 쓰레드 처리
: : :
: : : 현상: COM1은 정상동작되나 COM2 처리 쓰레드는 속도가
: : : 엄청느림
: : : COM1 과 COM2 쓰레드 코드와 처리는 동일한 구조임
: : :
: : : 질문: 즉시즉시 수신데이타를 나타나게 할수 없나요?
: : : 왜 COM2는 느리죠?
|