cmonthcalctrl 예제

또 다른 일반적인 실패는 스레드를 만들고 CWinThread::Run을 재정의하여 GetMessage 또는 PeekMessage 루프를 갖습니다. 이에 아무 소용이 없습니다! Run 메서드가 이미 수행하는 것입니다! 그리고 루프가 잘못되었을 것이라고 안전하게 가정 할 수 있습니다. 예를 들어 차단 조건이 없는 PeekMessage 루프는 CPU의 100%를 소비하는 메커니즘을 만듭니다. 전역 함수(예: 입력 매개 변수에 의해 완전히 정의되는 함수)가 필요한 경우 파일을 보관할 파일을 만들고 헤더 파일을 만들어 정의하고 함수를 사용하는 극소수의 모듈에 헤더 파일을 포함하면 됩니다. 현대 브라우징 기술 (예 : VC ++의 클래스 뷰)이있는 경우 사용 편의성이 손실되지 않으며 모든 종류의 함수가있는 모듈로 끝나지 않습니다. 몇 년 전에 알고 있는 좋은 프로그래머는 “모든 “유틸리티” 기능을 포함하는 “util.c”라는 파일을 작성하면 문제가 있다는 것을 알고 있습니다. 당신은 아마 프로그램 구조에 대한 단서”. 나는 그것에서 배웠고, 그 이후로 어떤 이름이 있을지에 관계없이 그러한 파일을 작성한 적이 없다. 25년 전과 같았습니다. 예, 나는 인수를 들었어요, “malloc는 빠르다”. 나는 이것을 옹호하는 사람을위한 몇 가지 조언이 있다: 생명을 얻으십시오. 당신은 단서가 없습니다.

할당은 수천 개의 지침이 필요합니다. 새 를 사용하여 도입된 사소한 오버헤드는 측정할 수 없습니다. 이는 실제 비용이 아키텍처 수준에 있을 때 “명령 수준에서 최적화하자”의 전형적인 예입니다. 이 사소한 오버헤드가 중요할 수 있다고 생각할 만큼 자주 할당하는 경우 매우 혼란스럽습니다. 왜 당신은 전혀 할당? 실제 문제는 프로그램을 효율적으로 만드는 것이고, 실제 비용(예: 할당자의 실제 비용)이 2~4배 크기로 늪에 달할 때 측정할 수 없는 오버헤드에 대해 걱정함으로써 이를 달성하지 못합니다. 실행은 클래스의 멤버 변수와 같이 다른 스레드에서 수정할 수 있는 완벽하게 좋은 루프처럼 보입니다. 예를 들어 특정 컨트롤 ID(예: F1 도움말 처리)에 연결하지 않고 마우스 및 키보드 이벤트에 대한 테스트를 포함하고, 트리 컨트롤의 레이블 편집과 같이 MFC가 방해하는 복잡한 작업을 처리하는 등 적절한 용도를 수행할 수 있습니다. 속성 페이지에 포함됩니다(레이블 편집을 종료하기 위한 Enter 키도 재정의를 하지 않으면 속성 시트를 닫고 해당 컨트롤에 전송된 하위 클래스 처리 메시지 내에서). 이는 동시 액세스가 잘못된 결과를 생성할 수 있는 변수에만 적용됩니다. 동시 액세스로 인해 잘못된 결과가 발생하지 않는 상황이 있습니다.

이러한 예 중 하나는 PeekMessage의 (잘못) 사용에 대한 섹션에서이 에세이에서 설명합니다. 그림 1의 왼쪽 하단에 있는 대형 디스플레이는 월 달력입니다. 날짜 및 시간 선택기 컨트롤과 마찬가지로 월 캘린더 컨트롤을 사용하면 사용자가 날짜를 선택할 수 있습니다. 그러나 월 캘린더 컨트롤을 사용하여 응용 프로그램에서 PIM(작은 개인 정보 관리자)을 구현할 수도 있습니다. 원하는 경우 1개월에서 1개월까지 객실에서 제공하는 만큼의 개월을 표시할 수 있습니다. MYMFC25A는 월 달력 컨트롤을 사용하여 2개월만 표시합니다. 월 캘린더 컨트롤은 단일 또는 다중 선택을 지원하며 번호가 매겨진 달및 동그라미 “오늘 날짜”와 같은 다양한 옵션을 표시할 수 있습니다. 컨트롤에 대한 알림을 통해 개발자는 굵게 표시된 날짜를 지정할 수 있습니다. 대담한 날짜가 무엇을 나타낼지 결정하는 것은 전적으로 개발자의 결정입니다. 예를 들어 굵은 기능을 사용하여 휴일, 약속 또는 사용할 수 없는 날짜를 나타낼 수 있습니다. MFC 6.0 클래스 CMonthCalCtrl은 이 컨트롤을 구현합니다.

상호 보완적인 문제는 ::CreateThread 또는 래퍼에서 반환된 후에도 스레드가 여전히 존재한다는 착각입니다. 예를 들어, 여기에 고전적인 오류: 이것은 일반적으로 두 번째 확장 된 콤보 상자와 같은 몇 가지 그로테스크 한 코드 예제와 함께 제공됩니다. 도레몬, 트위티, 맥, 핑크 팬더, 울트라맨 에이스, 죠스 의 세 가지 항목을 입력합니다.