티스토리 뷰
반응형
쓰레드는 쉽게 생각해서 병렬 처리라고 보시면 됩니다.
예로 시간을 세는 방법은 여러가지가 있지만 이렇게 코딩했다고 생각해 봅시다.
#include <iostream>
#include <process.h>
#include <Windows.h>
int main()
{
int waittingTime = 1;
while (true)
{
printf("지난 시간 %d초\r\n", waittingTime++);
Sleep(1000);
}
return 0;
}
원하는대로 출력이 되었습니다.
이 와중에 어떠한 일을 하고 싶다고 하면 어떻게 해야 할까요?
#include <iostream>
#include <process.h>
#include <Windows.h>
void CountTime();
int main()
{
char lineData[255] = { 0, };
// 함수안에서 while문이 돌기 때문에 blocked 상태가 된다.
CountTime();
// 프로그램이 여기까지 도달하지 못한다.
while (true)
{
scanf_s("%[^\n]", &lineData, 255);
printf("입력한 데이터 : %s", lineData);
}
return 0;
}
void CountTime()
{
int waittingTime = 1;
while (true)
{
printf("지난 시간 %d초\r\n", waittingTime++);
Sleep(1000);
}
}
숫자를 세는 코드를 함수화 시키고 추가로 키보드로 데이터를 입력 받게 했습니다.
CountTime 함수에서 while문을 빠져나올 수 없기 때문에 main함수의 while문은 동작하지 않습니다.
이와같이 blocked이 되는 함수, TCP, UDP Block 모드, 또는 데이터 송.수신이 느린 Serial 통신일 경우에는 쓰레드를 사용해서 별도로 처리해 주어야 합니다.
이제 CountTime함수를 쓰레드에서 동작하도록 변경해 보겠습니다.
반응형
#include <iostream>
#include <process.h>
#include <Windows.h>
unsigned __stdcall CountTime(void* arg); // 쓰레드 형태의 함수
int main()
{
char lineData[255] = { 0, };
// CountTime 쓰레드를 실행한다.
HANDLE hCountTime = (HANDLE)_beginthreadex(NULL, 0, CountTime, NULL, 0, NULL);
while (true)
{
fseek(stdin, 0, SEEK_END);
scanf_s("%[^\n]", &lineData, 255);
printf("입력한 데이터 : %s\r\n", lineData);
}
CloseHandle(hCountTime);
return 0;
}
unsigned __stdcall CountTime(void *arg)
{
int waittingTime = 1;
while (true)
{
printf("지난 시간 %d초\r\n", waittingTime++);
Sleep(1000);
}
_endthreadex(0);
}
시간 정보가 계속 출력이 되어서 이쁘게 보이진 않지만 잽싸게 입력하면 위처럼 보입니다.
위와 같이 쓰레드를 사용하면 block 함수에서 마냥 기다리는 것이 아니라
다른 동작을 동시에 진행 할 수 있습니다.
반응형
'C,C++' 카테고리의 다른 글
오버로딩, 오버라이딩 (0) | 2020.09.22 |
---|
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 비주얼 스튜디오
- 채팅
- c++
- echo tcp client
- SPL-TOKEN
- tcp echo server
- C
- C#
- C++ 쓰레드
- 프로그램
- 에코 클라이언트
- echo server
- 솔라나
- 큐 리스트
- UDP Socket
- uwp textbox
- uwp button
- program
- UDP 소켓 프로그램
- Visual Studio
- _beginthreadex 예제
- 윈도으 템플릿
- UDP Echo Server
- uwp textblock
- 에코서버
- uwp
- 토큰
- UDP 클라이언트
- TCP 서버
- SOL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함