------

[ AD ] Port Monitor ( Try to use a Best WebSite Monitoring Tool )

------
CreateEvent
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes,
BOOL bManualReset,
BOOL bInitialState,
LPCTSTR lpName);

예를들어, Test001 이라는 이벤트 객체를 생성하고 이 객체에
    이벤트가 발생하는지 5초간 대기하면서 체크하려면 아래와 같이 코드를 구성하면된다.
 
    HANDLE h_my_event = CreateEvent(NULL, TRUE, FALSE, "Test001");
    if(h_my_event != NULL)
    {
        DWORD state = WaitForSingleObject(h_my_event, 5000);
        if(state == WAIT_TIMEOUT) ...;            // 5초간 이벤트가 발생하지 않은 경우

        else if(state == WAIT_OBJECT_0) ...;    // 이벤트가 발생한 경우
        // ...( 생략 )...

        CloseHandle(h_my_event);

    }

CreateEvent 함수를 이용하여 이벤트 객체를 생성한 프로세스 또는 해당 프로세스가 생성한
    추가적인 스레드는 WaitForSingleObject 같은 함수를 이용하여 해당 이벤트 객체에 이벤트가
    발생하는지를 체크할수 있다. 
#include 
#include 

using namespace std;

HANDLE hEvent;

DWORD WINAPI MainLoop(LPVOID iValue) 
{
	int iFinish = 10;
	
	for ( int i=0; i< iFinish; i++) 
		cout << i << endl;

	// Loop End 
	SetEvent( hEvent) ;
	return 0;

}

void main()
{
	DWORD dwId;
	HANDLE hThread = 	CreateThread( NULL, 0,
				MainLoop,
				NULL,
				0,
				&dwId);
	if ( hThread == NULL) {
		DWORD dwError = GetLastError();
		cout << "Error in Create Thread :" << dwError << endl;
		return;
	}

	cout << "Create Thread !" << endl;

	hEvent = CreateEvent( NULL, FALSE, FALSE, "Test") ;

	cout << "Started waiting for the thread to complete." << endl;

	WaitForSingleObject( hEvent, 100 );

	cout << "Thread Completed." << endl;

	if ( hEvent != INVALID_HANDLE_VALUE )
		CloseHandle(hEvent);

	int val;
	cin >> val;
}
::WaitForSingleObject() 지정한 오브젝트가 시그널(신호) 상태가 되거나 타임아웃이 되면 제어를 돌려준다.
::SetEvent(hAAA); //시그널(신호) 상태가 되게 한다
[To properly terminate threads] Create an event object using the CreateEvent function. Create the threads. Each thread monitors the event state by calling the WaitForSingleObject function. Each thread ends its own execution when the event is set to the signaled state ( WaitForSingleObject returns WAIT_OBJECT_0).

'온라인게임' 카테고리의 다른 글

SQL 명령어  (0) 2010.11.10
Microsoft SQL Server  (0) 2010.11.10
map - stl에서 제공하는 자료형중 하나  (0) 2010.11.08
warning C4819  (0) 2010.11.05
윈도우 Console 실행  (0) 2010.11.05

map ( STL )
* 특징
두개의 요소가 한쌍을 이루어 하나의 자료구조 리스트
first은 인덱스이고
second는 데이터
반복자 iterator와 배열첨자를 사용하여 접근 가능
자동적으로 정렬된 상태를 유지, 정렬할 수 없다면 출력순서는 먼저 입력된 것이 가장 나중에 출력(stack)
인덱스가 중복되서 추가하면, 기존 데이터를 없애고 덮어씀
template를 사용하여 인덱스나 데이터 형식에 대하여 자유롭다


* 선언 방식
map<int, string> iMap;
map<char *, string> sMap;
* 접근 방식
 for ( itMap = iMap.begin(); itMap != iMap.end(); itMap++) {
  cout << itMap->first << ":" << itMap->second.c_str() << endl;
 }
 iMap[9] = "over write data";

#include 
#include 
#include 
using namespace std;

map iMap;
map sMap;
void print_iMap();
void print_sMap();

void main()
{


	// insert map data at random location

	iMap[5]="5th element data";
	iMap[3]="3rd element data";
	iMap[9]="9th element data";

	print_iMap();

	iMap[9] = "over write data";

	print_iMap();


	sMap["USA"] = "United State of America";
	sMap["CNA"] = "China";
	sMap["JPN"] = "Japan";

	print_sMap();

	sMap.erase("JPN");

	print_sMap();

	unsigned int var;
	cout << "[End] input any character to end" << endl;
	cin >> var;
}
void print_iMap()
{
	map::iterator itMap;

	cout << "[iMap] " << endl;
	for ( itMap = iMap.begin(); itMap != iMap.end(); itMap++) {
		cout << itMap->first << ":" << itMap->second.c_str() << endl;
	}
	cout << "====" << endl;


}
void print_sMap()
{
	map::iterator itMap;

	cout << "[sMap] " << endl;
	for ( itMap = sMap.begin(); itMap != sMap.end(); itMap++) {
		cout << itMap->first << ":" << itMap->second.c_str() << endl;
	}
	cout << "====" << endl;


}

'온라인게임' 카테고리의 다른 글

Microsoft SQL Server  (0) 2010.11.10
CreateEvent  (0) 2010.11.09
warning C4819  (0) 2010.11.05
윈도우 Console 실행  (0) 2010.11.05
Effective C++ 요약  (0) 2010.11.05

warning C4819: The file contains a character that cannot be represented in the current code page (949)

프로젝트 설정 변경

'온라인게임' 카테고리의 다른 글

CreateEvent  (0) 2010.11.09
map - stl에서 제공하는 자료형중 하나  (0) 2010.11.08
윈도우 Console 실행  (0) 2010.11.05
Effective C++ 요약  (0) 2010.11.05
smart pointers / Boost , TR1  (0) 2010.11.05
서버 프로그램 / Dialog / 다이얼로그 /

1. 윈도우에서 콘솔 띄우기

    BOOL AllocConsole() 

2. 생성된 콘솔에 문자열 보내기

    CString str;
    str = "문자열"

    DWORD dwWrite;
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    WriteFile(hOut, str, str.GetLength(), &dwWrite, NULL);

3. 생성된 콘솔없애기

    BOOL FreeConsole()


'온라인게임' 카테고리의 다른 글

map - stl에서 제공하는 자료형중 하나  (0) 2010.11.08
warning C4819  (0) 2010.11.05
Effective C++ 요약  (0) 2010.11.05
smart pointers / Boost , TR1  (0) 2010.11.05
thread로 인자 넘길때  (0) 2010.11.05

 Effective C++ 요약

http://kelly.springnote.com/pages/552442

목차

Chapter 1. C++에 왔으면 C++의 법을 따릅시다.
 항목 1. C++를 언어들의 연합체로 바라보는 안목은 필수
 항목 2. #define을 쓰려거든 const, enum, inline을 떠올리자.  - #define 컴파일 에러시 디버깅 어려움
 항목 3. 낌새만 보이면 const를 들이대 보자! - const 외부 변경 불가능
 항목 4. 객체를 사용하기 전에 반드시 그 객체를 초기화하자.
 

 Chapter 2. 생성자, 소멸자 및 대입 연산자
 항목 5. C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자.
 항목 6. 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자.
 항목 7. 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자.
 항목 8. 예외가 소멸자를 떠나지 못하도록 붙들어 놓자.
 항목 9. 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자.
 항목 10. 대입 연산자는 *this의 참조자를 반환하게 하자.
 항목 11. operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자.
 항목 12. 객체의 모든 부분을 빠짐없이 복사하자.
 

 Chapter 3. 자원 관리
 항목 13. 자원 관리에는 객체가 그만!
 항목 14. 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자.
 항목 15. 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자.
 항목 16. new 및 delete를 사용할 때는 형태를 반드시 맞추자.
 항목 17. new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자.
 

 Chapter 4. 설계 및 선언
 항목 18. 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자.
 항목 19. 클래스 설계는 타입 설계와 똑같이 취급하자.
 항목 20. '값에 의한 전달'보다는 '상수객체 참조자에 의한 전달' 방식을 택하는 편이 대게 낫다.
 항목 21. 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자.
 항목 22. 데이터 멤버가 선언될 곳은 private 영역임을 명심하자.
 항목 23. 멤버 함수보다는 비멤버 비프렌드 함수와 더 가까워지자.
 항목 24. 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자.
 항목 25. 예외를 던지지 않는 swap에 대한 지원도 생각해보자.
 

 Chapter 5. 구현 
 항목 26. 변수 정의는 늦출 수 있는 데 까지 늦추는 근성을 발휘하자.
 항목 27. 캐스팅은 절약, 또 절약! 잊지 말자.
 항목 28. 내부에서 사용하는 객체에 대한 "핸들"을 반환하는 코드는 되도록 피하자.
 항목 29. 예외 안전성이 확보되는 그날 위해 싸우고 또 싸우자!
 항목 30. 인라인 함수는 미주알고주알 따져서 이해해 두자.
 항목 31. 파일 사이의 컴파일 의존성을 최대로 줄이자.
 

 Chapter 6. 상속, 그리고 객체 지향 설계 
 항목 32. public 상속 모형은 반드시 "is-a"를 따르도록 만들자.
 항목 33. 상속된 이름을 숨기는 일은 피하자.
 항목 34. 인터페이스 상속과 구현 상속의 차이를 제대로 파악하고 구별하자.
 항목 35. 가상 함수 대신 쓸 것들도 생각해 두는 자세를 시시때때로 길러 두자.
 항목 36. 상속받은 비가상 함수를 파생 클래스에서 재정의하는 것은 절대 금물!
 항목 37. 어떤 함수에 대해서도 상속받은 기본 매개변수 값은 절대로 재정의하지 말자.
 항목 38. "has-a" 혹은 "is-implemented-in-terms-of"를 모형화 할때는 객체 합성을 사용하자.
 항목 39. private 상속은 심사숙고해서 구사하자.
 항목 40. 다중 상속은 심사숙고해서 사용하자.
 

 Chapter 7. 템플릿과 일반화 프로그래밍
 항목 41. 템플릿 프로그래밍의 천릿길도 암시적 인터페이스와 컴파일 타임 다형성부터
 항목 42. typename의 두 가지 의미를 제대로 파악하자.
 항목 43. 템플릿으로 만들어진 기본 클래스 안의 이름에 접근하는 방법을 알아 두자.
 항목 44. 매개변수에 독립적인 코드는 템플릿으로부터 분리시키자.
 항목 45. "호환되는 모든 타입"을 받아들이는 데는 멤버 함수 템플릿이 직방!
 항목 46. 타입 변환이 바람직할 경우에는 비멤버 함수를 클래스 템플릿 안에 정의해 두자.
 항목 47. 타입에 대한 정보가 필요하다면 특성정보 클래스를 사용하자.
 항목 48. 템플릿 메타프로그래밍, 하지 않겠는가?
 

 Chapter 8. new와 delete를 내 맘대로
 항목 49. new 처리자의 동작 원리를 제대로 이해하자.
 항목 50. new 및 delete를 언제 바꿔야 좋은 소리를 들을지를 파악해 두자.
 항목 51. new 및 delete를 작성할 때 따라야 할 기존의 관례를 잘 알아 두자.
 항목 52. 위치지정 new를 작성한다면 위치지정 delete도 같이 준비하자.

  Chapter 9. 그 밖의 이야기들
 항목 53. 컴파일러 경고를 지나치지 말자.
 항목 54. TR1을 포함한 표준 라이브러리 구성요소와 편안한 친구가 되자.
 항목 55. Boo자유친! 부스트를 늘 여러분 가까이에
 

'온라인게임' 카테고리의 다른 글

warning C4819  (0) 2010.11.05
윈도우 Console 실행  (0) 2010.11.05
smart pointers / Boost , TR1  (0) 2010.11.05
thread로 인자 넘길때  (0) 2010.11.05
error c1010070: Failed to load and parse the manifest  (0) 2010.11.04

smart pointers / Boost , TR1 

[boost]
scoped_ptr <boost/scoped_ptr.hpp>
intrusive_ptr <boost/intrusive_ptr.hpp>

shared_ptr <boost/shared_ptr.hpp>
weak_ptr <boost/weak_ptr.hpp> 

[tr1]
총 14개의 TR1의 새로운 구성요소 
#include  <memory>
tr1::shared_ptr, tr1::weak_ptr

tr1::function 

#include <functional>
tr1::bind 

tr1::array 

tr1::tuple

<Hash Table>
tr1::unordered_set, tr1::unordered_multiset, tr1::unordered_map, tr1::unordered_multimap 

tr11::mem_fn

tr1::reference_wrapper

tr1::result_of 



 

// std_tr1__functional__bind.cpp 
// compile with: /EHsc 
#include  
#include  
#include  
 
using namespace std::placeholders; 
 
void square(double x) 
    { 
    std::cout << x << "^2 == " << x * x << std::endl; 
    } 
 
void product(double x, double y) 
    { 
    std::cout << x << "*" << y << " == " << x * y << std::endl; 
    } 
 
int main() 
    { 
    double arg[] = {1, 2, 3}; 
 
    std::for_each(&arg[0], arg + 3, square); 
    std::cout << std::endl; 
 
    std::for_each(&arg[0], arg + 3, std::bind(product, _1, 2)); 
    std::cout << std::endl; 
 
    std::for_each(&arg[0], arg + 3, std::bind(square, _1)); 
 
    return (0); 
    } 
 

'온라인게임' 카테고리의 다른 글

윈도우 Console 실행  (0) 2010.11.05
Effective C++ 요약  (0) 2010.11.05
thread로 인자 넘길때  (0) 2010.11.05
error c1010070: Failed to load and parse the manifest  (0) 2010.11.04
LNK2001 :  (0) 2010.11.04

thread로 인자 넘길때


#pragma once

#include "stdafx.h"

#include 
#include 
#include 

using namespace std;

DWORD WINAPI thread(LPVOID lParam) 
{

	tr1::shared_ptr  sp = *((tr1::shared_ptr *)lParam);

	cout << "thread:count:" << sp.use_count() << endl;
		
	return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
	//tr1::shared_ptr sp =  new char ;
	tr1::shared_ptr sp( new char);
	*sp = 'a';
	cout << "_tmain:count:" << sp.use_count() << endl;

	HANDLE threadHandle = CreateThread( NULL,0, thread, (LPVOID)(&sp), 0,0);
	if ( !threadHandle ) return 0;

	WaitForSingleObject( threadHandle , INFINITE);
	CloseHandle(threadHandle);

	cout << "main:after:" << sp.use_count() << endl;

	int value;
	cin >> value;
	return 0;
}

'온라인게임' 카테고리의 다른 글

Effective C++ 요약  (0) 2010.11.05
smart pointers / Boost , TR1  (0) 2010.11.05
error c1010070: Failed to load and parse the manifest  (0) 2010.11.04
LNK2001 :  (0) 2010.11.04
c++ 기본 공부 순서 - 열혈 c++ 프로그래밍  (0) 2010.11.04

error c1010070: Failed to load and parse the manifest

[속성 변경]

properties > Linker > ManifestFile > Generae manifest > no

'온라인게임' 카테고리의 다른 글

smart pointers / Boost , TR1  (0) 2010.11.05
thread로 인자 넘길때  (0) 2010.11.05
LNK2001 :  (0) 2010.11.04
c++ 기본 공부 순서 - 열혈 c++ 프로그래밍  (0) 2010.11.04
visual studio 2010 바뀐 것들  (0) 2010.11.04

test.obj : error LNK2001: unresolved external symbol __imp__WSACleanup@0
test.obj : error LNK2001: unresolved external symbol __imp__WSAStartup@8
test.obj : error LNK2001: unresolved external symbol __imp__closesocket@4
test.obj : error LNK2001: unresolved external symbol __imp__inet_ntoa@4
test.obj : error LNK2001: unresolved external symbol __imp__gethostbyname@4
test.obj : error LNK2001: unresolved external symbol __imp__gethostname@8
test.obj : error LNK2001: unresolved external symbol __imp__WSARecv@28
test.obj : error LNK2001: unresolved external symbol __imp__connect@12
test.obj : error LNK2001: unresolved external symbol __imp__htons@4
test.obj : error LNK2001: unresolved external symbol __imp__inet_addr@4
test.obj : error LNK2001: unresolved external symbol __imp__WSASocketA@24
test.obj : error LNK2001: unresolved external symbol __imp__WSACreateEvent@0
test.obj : error LNK2001: unresolved external symbol __imp__WSAEventSelect@12
test.obj : error LNK2001: unresolved external symbol __imp__WSAJoinLeaf@32
test.obj : error LNK2001: unresolved external symbol __imp__bind@12
test.obj : error LNK2001: unresolved external symbol __imp__setsockopt@20
test.obj : error LNK2001: unresolved external symbol __imp__WSAResetEvent@4
test.obj : error LNK2001: unresolved external symbol __imp__WSAEnumNetworkEvents@12
test.obj : error LNK2001: unresolved external symbol __imp__WSAWaitForMultipleEvents@20
test.obj : error LNK2001: unresolved external symbol __imp__recv@16
test.obj : error LNK2001: unresolved external symbol __imp__send@16
test.obj : error LNK2001: unresolved external symbol __imp__recvfrom@24
test.obj : error LNK2001: unresolved external symbol __imp__select@20

[해결방안]
wsock32.lib / ws2_32.lib  추가

Part 01 C++로의 전환
Chapter 01 C언어 기반의 C++ 1
01-1 printf와 scanf를 대신하는 입출력 방식  - std::cout std::cin std::endl
01-2 함수 오버로딩(Function Overloading) - void a (int x ) {} void a(int x, int y) { }
01-3 매개변수의 디폴트 값(Default Value) - void a ( int a =3 ) { }
01-4 인라인(inline) 함수 - inline void a () { }
01-5 이름공간(namespace)에 대한 소개  - using namespace std

Chapter 02 C언어 기반의 C++ 2
02-1 Chapter 02의 시작에 앞서
02-2 새로운 자료형 bool  - bool
02-3 참조자(Reference)의 이해 - int *a , int &a
02-4 참조자(Reference)와 함수
02-5 malloc & free를 대신하는 new & delete - new int[3] ccc, delete []ccc
02-6 C++에서 C언어의 표준함수 호출하기

Part 02 객체지향의 도입
Chapter 03 클래스의 기본
03-1 C++에서의 구조체
03-2 클래스(Class)와 객체(Object)
03-3 객체지향 프로그래밍의 이해

Chapter 04 클래스의 완성
04-1 정보은닉(Information Hiding)
04-2 캡슐화(Encapsulation)
04-3 생성자(Constructor)와 소멸자(Destructor)
04-4 클래스와 배열 그리고 this 포인터

Chapter 05 복사 생성자(Copy Constructor)
05-1 '복사 생성자'와의 첫 만남
05-2 '깊은 복사'와 '얕은 복사'
05-3 복사 생성자의 호출시점

Chapter 06 friend와 static 그리고 const
06-1 const와 관련해서 아직 못다한 이야기
06-2 클래스와 함수에 대한 friend 선언
06-3 C++에서의 static
06-4 OOP 단계별 프로젝트 04단계

Part 03 객체지향의 전개
Chapter 07 상속(Inheritance)의 이해
07-1 상속에 들어가기에 앞서
07-2 상속의 문법적인 이해
07-3 protected 선언과 세 가지 형태의 상속
07-4 상속을 위한 조건
07-5 OOP 단계별 프로젝트 05단계
07 프로그래밍 문제의 답안

Chapter 08 상속과 다형성
08-1 객체 포인터의 참조관계
08-2 가상함수(Virtual Function)
08-3 가상 소멸자와 참조자의 참조 가능성
08-4 OOP 단계별 프로젝트 06단계

Chapter 09 가상(Virtual)의 원리와 다중상속
09-1 멤버함수와 가상함수의 동작원리
09-2 다중상속(Multiple Inheritance)에 대한 이해
09-3 OOP 단계별 프로젝트 07단계

Part 04 객체지향의 완성
Chapter 10 연산자 오버로딩 1
10-1 연산자 오버로딩의 이해와 유형
10-2 단항 연산자의 오버로딩
10-3 교환법칙 문제의 해결
10-4 cout, cin 그리고 endl의 정체

Chapter 11 연산자 오버로딩 2
11-1 반드시 해야 하는 대입 연산자의 오버로딩
11-2 배열의 인덱스 연산자 오버로딩
11-3 그 이외의 연산자 오버로딩
11-4 OOP 단계별 프로젝트 08단계

Chapter 12 String 클래스의 디자인
12-1 C++의 표준과 표준 string 클래스
12-2 문자열 처리 클래스의 정의
12-3 OOP 단계별 프로젝트 09단계

Chapter 13 템플릿(Template) 1
13-1 템플릿(Template)에 대한 이해와 함수 템플릿
13-2 클래스 템플릿(Class Template)
13-3 OOP 단계별 프로젝트 10단계

Chapter 14 템플릿(Template) 2
14-1 Chapter 13에서 공부한 내용의 확장
14-2 클래스 템플릿의 특수화(Class Template Specialization)
14-3 템플릿 인자
14-4 템플릿과 static

Chapter 15 예외처리(Exception Handling)
15-1 예외상황과 예외처리의 이해
15-2 C++의 예외처리 메커니즘
15-3 Stack Unwinding(스택 풀기)
15-4 예외상황을 표현하는 예외 클래스의 설계
15-5 예외처리와 관련된 또 다른 특성들
15-6 OOP 단계별 프로젝트 11단계

Chapter 16 C++의 형 변환 연산자와 맺는 글
16-1 C++에서의 형 변환 연산
16-2 '윤성우의 열혈 C++ 프로그래밍'을 맺는 글

'온라인게임' 카테고리의 다른 글

error c1010070: Failed to load and parse the manifest  (0) 2010.11.04
LNK2001 :  (0) 2010.11.04
visual studio 2010 바뀐 것들  (0) 2010.11.04
visual studio 2010  (0) 2010.11.03
tortoise SVN  (0) 2010.11.03

+ Recent posts