VS2013 사용 중에 Debug 를 하면 Dll 기호 로드하는데 시간이 많이 소요된다.

 

하기 처럼 MS 기호 서버 check 옵션을 꺼버리면 됨.

 

도구 메뉴의 옵션 쪽에 디버깅 이란 곳이 있고

기호 메뉴를 클릭하게 되면 "기호파일(.pdb) 위치"라는 항목이 있던데

여기에 "Microsoft 기호 서버" 서버 -> Uncheck.

 

 

STL C++11 관련하여,

thread를 사용하고자 하는 경우 하기 처럼 지정하고 사용하면 된다.

 

 

예) Log 관련 thread를 만들고자 한다면...

.h 지정

#include <sstream>

 

 volatile bool     m_bAlive_thread_queueLogMsg;
 std::mutex      m_mutex_queueLogMsg;
 std::thread      m_thread_queueLogMsg; 
 void       m_fn_run_queueLogMsg_Proc();

 

 

 

.cpp 사용

 -. 종료하기

 // thread 안전 종료
 m_bAlive_thread_queueLogMsg = false;
 if (m_thread_queueLogMsg.joinable())
  m_thread_queueLogMsg.join();

 

 

 -. 생성하기

 // log receiver thread 생성
 m_bAlive_thread_queueLogMsg = true;
 m_thread_queueLogMsg = std::thread(&해당Class::m_fn_run_queueLogMsg_Proc, this);

 

 

 -. thread body

 while (m_bAlive_thread_queueLogMsg)
 {
  if (PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_REMOVE))

......

 

    {
     // mutext guard & insert queue
     std::lock_guard<std::mutex> lock(m_mutex_queueLogMsg);  // 지역 mutex 걸기.
     m_queueLogMsgContainer.push(stLogMsgInf);     
    }

 

Thread 안에서   Window Message를 사용하고자 한다.

이러한 경우 외부에서 PostThreadMessage를 사용하여야 한다.

std::thread::id 정보를 이용하여 threadid를 가져오는게 가능하다.

 

///////////////////////////////////////////////////////////

 auto myid = m_thread_queueLogMsg.get_id();
 std::stringstream ss;
 ss << myid;
 string mystring = ss.str();
 uint64_t test = std::stoull(ss.str());

DWORD dThreadId = (DWORD)test;

 PostThreadMessage(dThreadId, WM_USER, (WPARAM)xxx, (LPARAM)yyy);

///////////////////////////////////////////////////////////

 

이상.

 

 

 

하기 사이트에서 발췌:

http://extern.tistory.com/2

 

 

1, 바이트 정렬(Byte Alignment) 왜 해야 하는가 ?

현재 일반적으로 많이 사용하는 32bit 체계를 예를들면, CPU 가 메모리에서 데이타를 가지고 올때
32bit 즉 4byte 의 데이타를 가지고 와서 처리를 한다. 이 얘기는 CPU 가 메모리의 주소를 4byte 단위로
쪼개서 접근을 한다는 말과 같겠다. 

말로 하면 머리에 잘 안들어온다. 예들 들어보도록 하자.

int n; 이라는 변수가 있다.
이변수의 주소는 0x1000 ~ 0x1004 이다. 왜냐 4byte 변수니까 4byte 를 차지하고 있겠지.
이러면 cpu 에서 메모리 0x1000 ~ 0x1004 의 조소를 한번에 받아 처리 할수가 있다.
CPU 는 32bit 씩 처리 되니까.
이러면 아무런 문제가 없다. 그런데 만일 int n;. 의 변수가 0x1001 ~ 0x1005 의 주소에
존재 한다고 생각해 보라.
그러면 CPU 는 메모리의 0x1000 ~ 0x1004, 0x1005 ~ 0x1008 의 주소를 받아서 처리해야
int n; 을 처리할 수 있는것이다.

그러면 쓰잘데기 없이 두번의 일을 하는 결과가 됐다. 그래서 바이트를 정렬해서 효율을 높이자는 것이다.

2, 그럼 실제 바이트 정렬(Byte Alignment) 을 어떻게 설정하나 ?

VC++ 설정에 보면 기본적으로 바이트 정렬해야 하는 byte 가 설정이 되어있다.
다른 컴파일러는 잘 모르것다. 있긴 있겠지 ㅡㅡ

사용자 삽입 이미지

 

[VC++ 71 설정화면]

이렇게 말로만 해서는 감이 안온다. 직접 코드를 보고 비교해 보장.

사용자 삽입 이미지














이와 같은 코드를 높고 설정값을 변경 해보자. 결과는 다음과 같다.

설정값 ==> nsize 값
1byte ==> 5 (ch, n, n, n, n)
2byte ==> 6 (ch0, nn, nn)
4byte ==> 8 (ch000, nnnn)
8byte ==> 8 (chnnnn000)

% ch: char 변수, n: int 변수, 0: byte padding

3, 컴파일러 바이트 패딩(Compiler Byte Padding) 은 무엇인가 ?

위의 예에서 STTEST 구조체가 실제 5byte 이라도 구조체 멤버 설정이 2byte 이면 6byte 로 나온다.
어떻게 처리되는 것일까 ?

2byte 단위로 정렬하기 때문에 하나의 단위를 2byte 라고 생각해 보자. 그리고 구조체 내의 변수를 넣어보자
처음 char 을 2byte 중 첫번째 바이트에 넣고 다음 int 를 넣으려고 했는데, 4byte 중 1byte 밖에 넣을수가
없다. 그래서 컴파일러는 2byte 정렬제한을 위반하지 않도록 바이트 패팅을 추가하여 char 를 2byte처럼
처리하고 다음 공간부터 int 를 저장한다.


4, 바이트 정렬을 코드에서 처리하기

바이트 정렬 구간을 소스에서 정의 하려면 "#pragma pack" 을 사용한다.

#pragma pack(1)
typedef struct Test
{
 char ch;
 int n;
}STTEST;
#pragma pack()

이렇게 사용하면 1byte 로 정렬하게 된다.
%참고로 "pragma" 키워드는 컴파일러에게 어떻게 처리하라고 명려하는 컴파일러 지시자 이다.

추가로 정렬을 Stack 를 이용할수도 있다.

#pragma pack(push, 1)
typedef struct Test
{
 char ch;
 int n;
}STTEST;
#pragma pack(pop)

요런식이 되겠다.

% 1,2,4,8,16 이외의 값을 설정하면 무시되고 컴파일러 옵션에 설정된 값으로 사용된다.

 

'프로그래밍 > VC++ 개발 코딩' 카테고리의 다른 글

w_char (TCHAR) 가변인수 만들기  (0) 2016.04.29
C++11 STL thread 처리 관련  (0) 2016.04.05
DebugView 사용하기  (0) 2015.09.21
프로그램 관리자 권한 주기  (0) 2015.09.15
64bit Bit Shift  (1) 2015.09.14

https://technet.microsoft.com/en-us/library/bb896647.aspx

 

Win32계열 프로그램 개발시에 소스코드에 OutputDebugString을 출력하는 부분은 

모두 디버그 뷰로 볼 수 있습니다.

 

참고로 디버그 모드(비주얼스튜디오에서는 F5를 눌른상태)로 실행을 하시면 디버그뷰에는 출력이 안됩니다.

 그냥 Ctrl+F5로 실행하시면 디버그뷰에서 출력이 됩니다.

 

서버화 시킬수도 있는데요

 방법은 /c를 첨부해서 실행하시면 됩니다.

 

즉, 콘솔 모드에서 debugview.exe /c로 실행하시면 서버화 되어

(Tip. 바로가기를 만드신 다음에 속성에서 대상에 보이시는 .exe 파일 다음에 /c를 추가해도 됩니다.)

 

다른 컴퓨터에서 해당 컴에 접속을 하시면 메시지가 디버그뷰에 출력이 됩니다.(접속은 한대만 가능합니다)

 

'프로그래밍 > VC++ 개발 코딩' 카테고리의 다른 글

C++11 STL thread 처리 관련  (0) 2016.04.05
바이트 정렬(Byte Alignment) pragma pack(1)  (0) 2015.11.20
프로그램 관리자 권한 주기  (0) 2015.09.15
64bit Bit Shift  (1) 2015.09.14
mutex 사용하기  (0) 2014.10.28

하기 사이트에서 발췌... (감사합니다.)

http://blog.naver.com/sbspace?Redirect=Log&logNo=130163194983

 

 

프로젝트를 컴파일해서 나온 실행파일에 관리자권한을 주고 싶을 때가 있다. 예를 들어, C:\Program Files 또는 C:\Windows 에서 실행하고 그 안에서 파일쓰기나 수정을 하려면 반드시 관리자권한으로 실행해야하기 때문이다. 물론 실행파일을 우클릭하고 관리자권한으로 실행하기 메뉴를 선택하거나 속성-호환성에서 항상 관리자권한으로 실행되도록 할 수도 있다. 하지만 조금 번거로운 면이 있기 때문에 아예 실행파일에 관리자권한을 준 상태로 컴파일하는 방법을 이용하는 것도 좋다.

 

핵심은 프로젝트 속성 - 링커 - 매니페스트 파일 에서 사용자권한을 변경하면 된다. 변경하는 방법은 매니페스트 파일의 내용을 편집하면 된다. 다이얼로그 기반으로 임의의 프로젝트를 생성하면 "프로젝트명.exe.intermediate.manifest "라는 매니페스트 파일이 생긴다. 이것을 메모장이나 기타 에디터로 열면 대략 아래와 비슷한 내용이 있을 것이다. 이 중에서 하이라이트 표시한 부분을 주목하자. 기존에는 'asInvoker'로 되어있었는데 'requireAdministrator'로 수정하고 컴파일하니 실행파일에 작은 방패모양이 붙으면서 자동으로 관리자권한으로 실행할 수 있게 되었다.

 

 

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='requireAdministrator' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.DebugCRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.DebugMFC' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*' />
    </dependentAssembly>
  </dependency>
</assembly>

 

'프로그래밍 > VC++ 개발 코딩' 카테고리의 다른 글

바이트 정렬(Byte Alignment) pragma pack(1)  (0) 2015.11.20
DebugView 사용하기  (0) 2015.09.21
64bit Bit Shift  (1) 2015.09.14
mutex 사용하기  (0) 2014.10.28
WM_NCHITTEST 메세지  (0) 2014.04.30

32 compile 환경에서 64bit 만큼의 Bit Shift를 수행하는 경우,

Warning 발생되며 캐스팅해주지 않으면 32bit 이상 shift가 불가하다.

 

하기는 MSDN 에서 발췌한 정보..

컴파일러 경고 (수준 3) C4334

'operator' : 32비트 시프트의 결과가 암시적으로 64비트로 변환됩니다. 64비트 시프트를 사용하시겠습니까?

 

32비트 시프트의 결과가 암시적으로 64비트로 변환되었습니다. 컴파일러에서 64비트 시프트의 적용 여부를 결정할 수 없습니다. 이 경고를 해결하려면 64비트 시프트를 사용하거나 시프트 결과를 명시적으로 64비트로 캐스팅해야 합니다.

다음 샘플에서는 C4334 오류가 발생하는 경우를 보여 줍니다.

// C4334.cpp
// compile with: /W3 /c
void SetBit(unsigned __int64 *p, int i) {
   *p |= (1 << i);   // C4334
   *p |= (1i64 << i);   // OK
}

'프로그래밍 > VC++ 개발 코딩' 카테고리의 다른 글

DebugView 사용하기  (0) 2015.09.21
프로그램 관리자 권한 주기  (0) 2015.09.15
mutex 사용하기  (0) 2014.10.28
WM_NCHITTEST 메세지  (0) 2014.04.30
오픈 라이센스 Dia Program 소개  (0) 2014.01.23


1. 보내는 메일 서버(SMTP) 인증 필요 체크

(Outlook2013)

파일 --> 정보 --> 계정설정 --> 설정하고자 하는 계정 선택(더블클릭) --> 기타설정 -->보내는 메일 서버

--> 보내는 메일 서버(SMTP) 인증필요 체크 & 로그온 정보에 ID와 암호 입력

 

 

 

 


2. 아웃룩에서 실행파일 보내도록 설정방법

a. 실행 --> regedit 엔터 (레지스터 편집창 열기)

b. HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Security 로 이동

c. 새로만들기 -> 문자열 값 -> 값 이름 "Level1Remove" 설정 -> 값 데이터 "exe;msi;" 등 허용 하고자 하는 첨부파일의 확장자를 등록

d. 아웃룩 재시작 또는 시스템 재시작

 

 

 

3. 아웃룩 주기적 보내기/받기

a. 보내기/받기 --> 보내기/받기 그룹 -->예정된 보내기/받기 실행안함에 체크표시 지우기

b. 보내기/받기 --> 보내기/받기 그룹 -->보내기/받기 그룹 정의 --> 원하는대로 설정

얼마전 내 노트북에 SSD를 장착하게 되었다.

SSD Samsung 840 EVO 120G (mSATA) 성능 테스트 내용

 

결론 :  840 EVO 성능 spec은 Turbo Write 기능이 적용되어 500m/s 사양인데,

         Samsung RAPID Mode 및 성능 최적화, Firmware Update 이후 Spec에 만족하는 사양이 나온다.

모델: Samsung SSD 840 EVO (mSATA)

노트북 : Xnote A510 (i7, CPU 1.8G)

 

 

 

 

CrystalDiskMark 자료실에서 무료 다운 가능함.

 

Samsung의 경우 RAPID Mode를 사용하는게 속도 향상 최적화가 되는 것을 확인했다.

휴~~

2014년 12월 참석하고픈 세미나

사전등록한 9월 교육도 업무로 참석 불가 --;

이번엔 꼭~!

'교육세미나' 카테고리의 다른 글

스마트한 패션산업을 위한 RFID  (0) 2020.06.10
2014 인문 + SW 컨퍼런스  (0) 2014.09.19
2014 기술 닥터 사업 공고  (0) 2014.02.17
2014년 업종별 신산업 보고서 안내  (0) 2014.02.14
CIO Summit 2014  (0) 2014.02.13

한림성심대학교(총장 금승호) 평생교육원은 지난 16일 국가자격 산림치유지도사 2급 과정 개강식을 갖고 본격적인 운영에 들어갔다.

한림성심대는 국내 두 번째로 산림치유지도사 양성기관으로 지정돼 16일부터 12월 27일까지 모두 158시간 동안 25명을 교육하게 된다.

산림치유 지도사는 자연의 다양한 요소와 접촉 관찰 하고 체험과 보행, 등산, 체조, 운동, 휴식, 놀이 등 여가 프로그램을 개발 보급해 새로운 일자리 창출과 사업화를 위한 기반조성을 갖출 수 있는 분야로 진출하게 된다.

대학 관계자는 "지역의 자연·문화·인적·음식 등 어메너티 자원을 활용해 산림치유분야와 연계함으로써 강원도만의 특화된 전문인력을 양성하는데 주력할 것"이라며 "지역 경제 활성화와 비즈니스 모델을 개발해 지역특화 프로그램을 지속적으로 운영하겠다"고 말했다.

한편 한림성심대는 지난달 23일 치러진 2급 양성과정 평가시험에서 응시생 53명 중 44명이 합격한 바 있다.


산림청(청장 신원섭)은 올해 국립산림교육원에서 치러진 '제2회 산림치유지도사 자격 평가시험' 결과 127명(1급 10명, 2급 117명)에게 산림치유지도사 자격증을 발급했다고 24일 밝혔습니다.


산림치유지도사는 산림치유 프로그램을 개발ㆍ보급하거나 지도하는 업무를 담당하는 산림치유 전문가를 말한다. 산림청은 산림치유에 대한 양질의 서비스를 제공하기 위하여 2007년부터 치유의 숲을 조성하고 산림치유 프로그램을 운영할 수 있는 '산림치유지도사 제도'를 시행해왔습니다.


산림치유지도사 자격증은 작년에 처음 38명에게 발급했다. 올해 127명에게 추가로 발급함에 따라 산림치유지도사가 165명으로 늘어나게 됐습니다.


올해 자격증 취득자 중 최고령자는 70세 박주화(2급)씨이며, 최연소자는 26세 정현영(2급)씨로 자격증 취득자 평균 연령은 49.4세입니다. 연령층은 20대 8명, 30대 19명, 40대 25명, 50대 50명, 60대 24명, 70대 1명으로 50대가 가장 많았으며, 성비는 남성 48%, 여성 52%였습니다.


현재 산림치유지도사를 양성하는 기관은 9개소(가톨릭대ㆍ한림성심대ㆍ광주보건대ㆍ순천대ㆍ충북대ㆍ동양대ㆍ전남대ㆍ전북대ㆍ대구한의대)가 지정돼있다. 산림청은 2017년까지 500명을 양성하여 산림치유 전문가로 활용할 계획입니다.


산림청 임상섭 산림휴양치유과장은 "산림치유지도사에 많은 분들이 관심을 가져주심에 감사드리다."며, "산림치유지도사 자격증을 취득하신 분들을 통해 제공되는 산림치유 서비스가 국민 건강증진에 기여하고 행복한 녹색복지 국가를 만드는데 이바지하길 바란다."라고 밝혔다.


산림치유지도사 자격제도 관련 자세한 사항은 산림청 누리집(홈페이지_http://www.forest.go.kr/)에서 확인하거나 산림청 산림휴양치유과(042-481-8877)로 문의하면 된다.

관련글: http://blog.daum.net/kfs4079/17209217

+ Recent posts