|
Sleep이란것은 일정 시간 동안 쓰레드를 Ready상태로 만드는것입니다.
따라서 OS의 스케줄러는 다른 쓰레드에 실행을 넘기는 것이죠.
쓰레드를 제대로 구현하셨다면
Sleep을 걸었다고 다른 쓰레드가 멈추는 현상은 없을겁니다.
오히려 더 잘 돌아가겠죠.
blue_sky 님이 쓰신 글 :
: 안녕하세요...
: 스레드에 대한 초보적인 질문 몇가지만 하겠습니다.
: 다름이 아니라...
: 시리얼 통신에서 스레드에서 데이터를 보내고 받는 부분을 구현했는데요.
: 예를 들어
:
: 전송할 데이터..
: for(int i=1; i<5; i++)
: SetEvent(hEvent[i]);
:
: 스레드...
: CommProc()
: {
: while(true)
: {
: WaitForSingleObject(hEvent1,INFINITE);
:
: Comm->WriteFile(data, size);
: Sleep(300);
: nSize = Comm->ReadFile(hComm,buf,nHeaderSize,dwRead,NULL);
: size = nSize;
: if(nSize < nHeaderSize)
: {
: for(int i=0; (size >= nHeaderSize) && (nReadCount < 30); i++)
: {
: nSize = Comm->ReadFile(hComm,buf+size,nHeaderSize-nSize,NULL);
: size += nSize;
: nReadCount++;
: Sleep(100);
: }
: }
: //Recv Data Process...
: }
: }
:
: 이렇게 하구 시리얼 포트를 약5개를 열었습니다.
: 근데요 만약 1개만 통신하구 4개가 통신에서 Receive데이터를 받지 못하는 상황이 되면 통신이 되고있는 1개의 데이터 전송이 매우 늦어집니다.(1개 보내고 다음데이터 전송까지의 시간이...)
: 이일을 어떻게 처리해야 하는지 감이 오질않네요...
: 스레드들이 하나의 스레드에서 Sleep()을 하면 다른 4개의 스레드들도 멈춰버리나요...
: 아님 Sleep시간동안 다른 스레드들이 일을 시작하나요.
: 고수님들의 한마디를 기다립니다....
|