◆ 무한한 가능성/& Visual C/C++ 41

Thread in C runtime library (다중스레드, Multi-Thread)

▷ _tiddata : 다중 스레드에서의 C runtime library 문제점을 해소하려면, 이와 같은 전역변수, 정적변수들을 스레드당 별도로 생성하여 관리해야 한다. 이러한 데이터들을 모아놓은 것이 구조체 _tiddata 이다. ▶ 다중 스레드(/MT) - LIBCMT.LIB ▶ 다중 스레드 디버그(/MTd) - LIBCMTD.LIB ▶ 다중 스레드 DLL(/MD) - MSVCRt.LIB ▶ 다중 스레드(/MDd) - MSVCRtD.LIB *스레드 생성 ** _beginthread unsigned long _beginthread( void(__cdecl * start_address)(void*), unsigned stack_size, void *arglist ); // start_address : 생..

Thread example code. - Thread03

Thread example code. - Thread03 //------------------------------------------------------------------------------ // WIN32 API를 이용한 스레드 예제 - 시작 //------------------------------------------------------------------------------ #include #define ONEK 1024 typedef struct _SumInfo { int a, b, s; }SUMINFO, *PSUMINFO; // a 에서 b까지의 합을 s에 저장 DWORD WINAPI Sum(void* p); // 스레드 함수 HANDLE g_hConsoleOut; // 콘솔 ..

Thread

*스레드 생성 : 스레드 생성시.. 프로세스에 'CPU에 레지스터'와 '메모리 영역에 static영역'이 추가된다. ※ 프로세스의 구성요소는... CPU에 레지스터, 메모리 영역에 code영역, 커널오브젝트, Heap영역, static영역으로 구성된다. ** CreateThread API 함수 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // 커널 오브젝트에 대한 보안 속성 DWORD dwStackSize, // 스레드가 사용할 스택 영역의 크기 LPTHREAD_START_ROUTINE lpStartAddress, // 스레드 오브젝트가 실행할 시작점 LPVOID lpParameter, // 생성될 스레드에게 전달할 포인터 DWORD d..

Kernel Object

- Event : 시그널과 넌시그널 상태를 갖는 커널 오브젝트, 이벤트가 발생하였을 때 하나 또는 여러 개의 스레드에게 알려 줄 수 있다. - Mutex : 열쇠와 같은 개념으로 특정 시점에서 단 하나의 스레드만이 소유할 수 있다. 공유 자원을 사용해야 하는 부분에서는 뮤텍스를 소유하다가 사용이 끝나면 놓아주면 된다. (뮤텍스=1개의화장실키, 스레드=사람이라면... 1개의 화장실에 1사람이 1개의열쇠를 들고 들어가서 잠그고 다른사람들은 대기) - Semaphore : 뮤텍스가 단 하나의 스레드만 소유하는 것과 달리 여러 개의 스레드를 소유할 수 있다. - Waitable Timer : 특정 시간이 되면 스레드에게 통보한다. - Change Notification : 디렉토리에 관하여 개발자가 선택한 특정..

Safe String Reference

C/C++ 문자열 관련 함수는 buffer overflow 취약점을 가지고 있다. 이에 MS에서 Safe String Reference를 제공한다. 프로젝트를 진행중에 _vsnwprintf 함수의 buffer overflow문제가 발생하기도 했다. 다음은 C/C++문자열을 Safe String Reference로 변경의 호환이다. ------------------------------------------------------------------------- 1. StringCchCat() strcat, wcscat, lstrcat, StrCatBuff, _tcscat, _ftcscat 2. StringCchCatN() strncat, StrNCat 3. StringCchCopy() strcpy, wc..

[C/C++] cctype 문자 함수

[C/C++] cctype 문자 함수 isalnum() : 전달인자가 영숫자, 즉 알파벳 문자이거나 숫자이면 true isalpha() : 전달인자가 알파벳 문자이면 true isblank() : 전달인자가 빈칸 문자 또는 수평 탭 문자이면 true iscntrl() : 전달인자가 제어 문자이면 true isdigit() : 전달인자가 십진 숫자(0~9)이면 true isgraph() : 전달인자가 빈칸이 아닌 인쇄할 수 있는 문자이면 true islower() : 전달인자가 소문자이면 true isprint() : 전달인자가 빈칸을 포함하여 인쇄할 수 있는 문자자이면 true

[C/C++] 입력방법 cin>>ch; cin.get(ch);

[C/C++] 입력방법 cin>>ch; cin.get(ch); cin>>ch; : txt를 입력받는다. 그러나 빈칸, 탭, 개행문자는 무시하고 건너 뛴다. cin.get(ch); : 입력받은 txt가 뭐든지간에 ch저장하고 리턴한다. 많은 프로그램들이 텍스트 입력이나 텍스트 파일로부터 문자 단위로 입력을 읽어들인다. istream 클래스는 이 작업을 할 수 있는 몇 가지 방법을 제공한다. ch가 char 형 변수일 때, 다음과 같은 명령문은 cin >> ch; 입력 문자를 ch에 저장한다. 그러나 이 명령문은 빈칸 문자나 탭 문자, 개행 문자 등은 무시하고 건너뛴다. 다음과 같은 멤버 함수의 호출은 cin.get(ch); 입력 문자를 읽어들여 그 값이 무엇이든 간에 ch에 저장한다. cin.get() 멤..