얼마전 치킨 먹고 싶다는 제말에

남편이 먹고 싶은 치킨 고르라고 하길래~

열심히 고르고 골라 치킨 쉐프에 주문했습니다.

요리

 

 

마늘치킨도 맛있어 보였고

생맥주로 무료로 준다는 말에!!ㅋㅋㅋ

 

 

전화해서

양념반 마늘반으로 주문하고

생맥주 준다던데.. 하니까

음료수 or 생맥주 500ml 둘 중에 선택하는 거래요!

 

우린 아쉬워 하면서

생맥주를 선택했어용~

 

 

빨래를 널고 있으니

주문한 우리 치느님이 도착했어요! ㅋㅋㅋㅋ

 

 

 

 

곱게 포장되어 있어

봉투에서 꺼내 보니..ㅋㅋㅋㅋㅋ

 

 

 

 

'고마워, 널 위해 준비했어~'

문구의 박스와 음료 대신 받은 생맥주가 똭!

 

 

 

 

들깨 소스??와

직접 만든 무절임이 치킨과

함께 들어 있었어요~~

 

 

이제 치킨의 비쥬얼을 보러 가실까요? 

 

 

 

 

마늘치킨은

밑으로 소스가 다 흘러

위에는 후라이드 치킨 같고..

밑에 있는 치킨은 촉촉하고 마늘향이 낫어요~

 

받으면 섞어서 먹어야 할거 같아요

 

 

 

양념 치킨은 일단 비쥬얼은

합격!

신나2

 

 

 

 

사진도 안찍고 한입 베어

물었다가..... 사진 찍을라고....ㅋㅋㅋㅋㅋㅋ

자국이 선명하죠?ㅋㅋㅋㅋ

 

마늘 치킨은 마늘향이 나는

튀김이 촉촉한 치킨 맛이였어요~

 

저도 그렇고 남편도 그렇고

좋아하는 타입은 아니였어요.......

 

 

 

 

양념치킨도 남편이 한입!ㅋㅋㅋㅋㅋ

 

양념치킨도.....

우리타입은......

 

양념치킨은 보통 양념치킨이였음 했는데..

우리가 아는 평범한 양념치킨이 아닌

약간 매콤한 맛을 내려고 했지만

그마저도 실패한 맛이였고

 

양념도 많이 아끼신 듯한 느낌이였어요..

 

 

 

 

혹시나 해서 소스에 찍어서 한입!

혹시나... 했지만... 역시나....

 

 

저흰 평소에 1마리 시키면

반마리 정도 남기는데..

여긴 양도 쪼금~~~~~~이네요..

 

 

사람 입맛에 따라 다를 수 있지만..

저흰 대체적으로 많이 실망했고..

다시는 먹을거 같지 않은 치킨집 후기였습니다.

 

 

 

UI쓰레드를 여러개 두어서 UI갱신을 빠르게할 목적으로 테스트하였다.

 

윈도우 프로그램은 하나의 메세지 루프&큐를 가지기 때문에 많은 윈도우들을 갱신하면 부하가 걸린다.

 

그래서 각 윈도우 마다 메세지 루프&큐를 갖게 하여 성능이 향상 됨을 테스트하였다.

 

 

테스트 시나리오

1. 윈도우 20개 생성

2. 윈도우 마다 10ms 타이머 발생하여 랜덤한 값을 그리드 갱신

3. 갱신 시간 확인

 

테스트 결과

1. 한개의 UI 쓰레드 테스트

 

 

 

 

 

2. 20개의 UI 쓰레드 테스트

 

 

 

 

 

 

주요 코드

 

/// <summary>

/// 새로운 UI Thread 가진 View 추가한다.

/// </summary>

private void AddNewUIThreadSubView()

{

    SubView subView = null;

    Thread thread = new Thread(

                    () =>

                    {

                        subView = new SubView();

                        forms.Add(subView);

                        Application.Run(subView);

                    });

    thread.SetApartmentState(ApartmentState.STA);

    thread.Start();

} 

 

 

기타

1. UI 쓰레드를 생성 후에 해당 Form에 접근할때에는 다른 쓰레드이므로 Invoke를 통하여 조작해야한다.

2. MDI는 SetParent 함수를 이용해 해결한다.

3. UI Thread가 여러개일때는 CPU 사용률이 올라갔지만, UI 갱신은 빨라졌다.

 

 

의문점

1. 한개의 UI 쓰레드에서 SetParent 함수를 설정하니 성능이 올라갔다. 이유를 고민해봐야함..ㅠㅠ

2. 1번의 이유로 ..과연 멀티 UI 쓰레드 때문에 성능이 향상된건지 의문이다................ㅡㅜ

 

 

 

 

소스코드

 

HowToMultiUIThreads.zip

오랜만에 맛집 포스팅 하네요 ㅋㅋㅋㅋ

 

결혼하고 나서 너무 소홀해진 블로그...

다시 열심히 포스팅 해야 겟어요!!

 

굿모닝3

 

 

얼마전에 시부모님과 먹으러 갔던 쌈밥!ㅋㅋ

저희 가족은 쌈밥 먹으러

항상 이곳에 가는거 같아요~

 

 

메뉴는 꽃등심 쌈밥부터~

유황 오리불고기 쌈밥까지 ㅋㅋㅋㅋ

 

 

 

저흰 생오겹 쌈밥 2인,

유황생오리 쌈밥 2인

이렇게 주문했어요~ㅋㅋㅋㅋ

 

여러가지 먹으려고..^^

 

이날 따라 사람이 너무 많아서

주문 받으시는 분도

서빙하시는 분도 정신없이 바쁘셔서...

 

반찬도 조금 늦게 나오고 했지만~

맛있으니!ㅋㅋㅋㅋㅋ

 

 주문하고 기다리니

반찬들이 세팅되기 시작했어요~~

 

일단 쌈이 저렇게 푸짐하게ㅋㅋㅋㅋㅋ

저게 2인분 쌈

 

제가 이름을 잘 몰라서

적을 순 없지만..... 다양한 쌈이 푸짐하게 나와요

 

 

나물도 숙주나물, 고사리?.......

이름은 잘 모르겠으나....ㅋㅋㅋ

여러가지 나와요 ㅋㅋㅋㅋ

 

 

버섯도 나오고 ㅋㅋㅋㅋ

제가 이름을 아는건 버섯뿐......ㅋㅋㅋ

슬퍼2

 

 

 

사진을 못 찍었나.... 맛없게 나오긴 했지만...ㅋㅋ

김치도 사오는 김치같지 않고

직접 담그는 김치인거 같더라고용~

 

 

 

쌈과 별도로 상추 겉절이도

나옵니당~

 

밥먹고 푹 잘수 있을듯..ㅋㅋㅋ

 

 

 

지금 포스팅하면서 봤는데

김치등 모든 반찬을 매일 아침

직접 조리한데요~~ㅋㅋㅋ

 

믿고 갈 수 있게죵?

 

 

 

밥과 반찬을 한입씩 먹고 나면

주문한 고기가

똭!

 

 

 

 

오리랑 오겹이랑 ㅋㅋㅋ

마늘이랑 허브도 살짝 올려 나왔어요~

 

아! 강된장을 안찍었네요........

여긴 강된장이 메인인데.......

 

2인당 뚝배기에 강된장을 끓여서 주는데

정말 맛있거든요!! ㅋㅋㅋㅋ

 

강된장 맛에 이집 가는거 같아용~!!

다음에 갈때 강된장 찍어서

업데이트 해야겠어요 ㅋㅋㅋㅋㅋ

Bye

 

 

 

 

 

 

 

현재 챔픽스 3주차 복용하고 있다.

 

약 먹는걸 소흘히 하다가 이제 정신 차렸다.

 

 

진정한 금연 시작은 임플란트 발치한 다음 날인 3월 13일부터이다.

 

 

갑자기 금연 일기를 쓰는 이유는

 

업무 중에

 

머리가 멍하고 졸려서이다ㅠㅠㅠㅠ

 

숫자 계산도 잘안됨.......ㅠㅠㅠㅠ

 

집에만 있을 때에는 괜찮았는데..ㅠㅠ

 

 

 

 

금연 4일차 

금단현상 리스트:

 

멍함,

어지러움

입이 마름,

배고픔,

졸림

 

 

아래의 속성 수정

프로젝트->속성->구성속성->일반->프로젝트 기본값->공용 언어 런타임 지원 = 공용 언어 런타임 지원(/clr)

(컴파일 하면 에러 발생하면 하나하나씩 컴파일 옵션 처리해주면 된다)

 

#include <iostream>

#include <stdlib.h>

#include <string.h>

#include "msclr\marshal_cppstd.h" 

 

using std::cout;

using std::endl;

using std::string;

 

using namespace System;

using namespace msclr::interop;

 

void main()

{

         String ^s = "abc";

        

         string unmanaged = marshal_as<std::string>(s->ToUpper());

 

         cout << unmanaged << endl;

}

 

 

'기타 > C++' 카테고리의 다른 글

Native C++에서 C++/CLR 클래스 사용하기  (0) 2015.03.06
콘솔싸이월드  (0) 2011.01.20
비트학생관리  (0) 2011.01.20

 

C++/CLR 클래스

 

Calculrator.cpp

#include "Calculator.h"

 

 

Calculator::Calculator()

{

}

 

 

int Calculator::Sum(int aint b)

{

         return a + b;

}

 

int Calculator::Max(int aint b)

{

         return System::Math::Max(ab);

}

 

string Calculator::HelloWorld(string text)

{

         return text.append("\tHello World!");

}

 

 

 

Calculrator.h

#pragma once

 

#include <string>

 

using std::string;

 

ref class Calculator

{

public:

         Calculator();

         int Sum(int a, int b);

         int Max(int a, int b);

         string HelloWorld(string text);   

};

 

 

 

C++/CLR Native 랩퍼 클래스

 

CalculratorWrapper.cpp

 

#include "CalculatorWrapper.h"

 

CalculatorWrapper::CalculatorWrapper()

{

         _managedObject = gcnew Calculator();

}

CalculatorWrapper::~CalculatorWrapper()

{

 

}

 

int CalculatorWrapper::Sum(int aint b)

{

         return _managedObject->Sum(ab);

}

int CalculatorWrapper::Max(int aint b)

{

         return _managedObject->Max(ab);

}

string CalculatorWrapper::HelloWorld(string text)

{

         return _managedObject->HelloWorld(text);

}

 

ICalculatorWrapper        *ICalculatorWrapper::CreateInstance()

{

         return ((ICalculatorWrapper *)new CalculatorWrapper());

}

 

void ICalculatorWrapper::Destroy(ICalculatorWrapper *instance)

{

         delete instance;

}

 

 

CalculratorWrapper.h

#pragma once

 

#include <vcclr.h>

#include <string>

#include "ICalculatorWrapper.h"

#include "Calculator.h"

 

 

class DLLAPI CalculatorWrapper : ICalculatorWrapper

{

private:

         gcroot<Calculator ^>  _managedObject;

public:

         CalculatorWrapper();

         ~CalculatorWrapper();

         int Sum(int a, int b);

         int Max(int a, int b);

         string HelloWorld(string text);

};

※ gcroot 템플릿 이용해서 C++/CLR 개체 사용

 

 

C++/CLR 랩퍼 인터페이스

ICalculratorWrapper.h

 

#pragma once

 

#include <string>

using std::string;

 

#ifdef CPLUSPLUSCLR_EXPORTS

#define DLLAPI  __declspec(dllexport)

#else

#define DLLAPI  __declspec(dllimport)

#pragma comment (lib"CPlusPlusCLR.lib"

#endif

 

class DLLAPI ICalculatorWrapper

{

public:

         virtual int Sum(int a, int b) = 0;

         virtual string HelloWorld(string text) = 0;

         virtual int Max(int a, int b) = 0;

         static ICalculatorWrapper *CreateInstance();

         static void      Destroy(ICalculatorWrapper *instance);

};

 

 

 

랩퍼 클래스를 이용해 사용하는 Native 클래스

 

#include <iostream>
#include "ICalculatorWrapper.h"
 
using std::cout;
using std::endl;
 
void main()
{
	ICalculatorWrapper *wrapper = ICalculatorWrapper::CreateInstance();
 
	int sum = wrapper->Sum(12, 12);
	int max = wrapper->Max(100, 9);
	string text = wrapper->HelloWorld("test");
	
	cout << sum << endl;
	cout << text << endl;
 
	ICalculatorWrapper::Destroy(wrapper);
} 

 

'기타 > C++' 카테고리의 다른 글

Native C++에서 C++/CLR 클래스 사용하기(CLR 옵션)  (0) 2015.03.06
콘솔싸이월드  (0) 2011.01.20
비트학생관리  (0) 2011.01.20

1. RockMargin

 

 

 - vs2010, vs2012, vs2013 지원 (2014.12.24 현재)

 - 전시 중인 영역을 우측에서 확인

 - 더블 클릭하여 선택시 단어 현재 사용중인 영역 우측에 빨간색으로 표시

 - 책갈피, 중단점 우측 표시

 

 

https://visualstudiogallery.msdn.microsoft.com/1b0d7360-40dd-447e-8bef-90e2cf52f683

 

 

2.1 Productivity Power Tools VS2010

2.1 Productivity Power Tools VS2012

2.2 Productivity Power Tools VS2013

 - vs2010, vs2012, vs2013 지원(2014.12.24 현재)

 - {} 컬럼 그리드 표시

 - 솔루션의 사용중이지 않은 Using 제거

 - 마우스 Middle 클릭 스크롤링 지원

 - 닫았던 문서 다시 띄우기(Ctrl + Shift + Z)

 - 정의로 이동(Ctrl + 클릭)

 - 정렬

 

 

 - 솔루션 에러 표시

 

특정 인덱스의 Cell의 Value값을 하나하나 가져오면 속도가 굉장히 느립니다.

 

범위를 선택하고 범위에 해당하는 값들을 한번에 가져와야 속도가 빠릅니다.

 

Worksheet 클래스의 UsedRange(MSDN링크) 속성을 이용해 값을 가져오면 상단의 사용하지 않았던 범위는 놓쳐서

 

특정 인덱스에 접근하기 힘듭니다.

 

왼쪽 상단의 Cell부터 사용한 우측 하단의 Cell까지의 범위의 데이터를 가져와서 작업을 진행해야합니다.

 

 

 

/// <summary>

/// 해당 WorkSheet의 전체 데이터를 가져온다.

/// </summary>

/// <param name="sheet"></param>

/// <returns></returns>

private object[,] GetTotalValue(Worksheet sheet)

{

    //사용중인 범위(한번도 사용하지 않은 범위는 포함되지 않음)

    Range usedRange = sheet.UsedRange;

    //마지막 Cell

    Range lastCell = usedRange.SpecialCells(XlCellType.xlCellTypeLastCell);

           

    //전체 범위 (왼쪽 상단의 Cell부터 사용한 맨마지막 범위까지)

    Range totalRange = sheet.get_Range(sheet.get_Range("A1"), lastCell);

 

    return (object[,])totalRange.get_Value();

} 

 

VisualStudio에서 현재 프로젝트에서 사용하지 않는 라이브러리를 제거하는 기능이 필요하여 검색하였습니다.

 

현재까지는 VS2012까지 지원하는 오픈소스가 있었습니다. (Lardite Reference Assistant 바로가기)

 

 

 

 

 

 

현재 프로젝트는 VS2013을 사용 중이기 때문에 몇가지 조취를 취하면 사용 가능하였습니다.

 

1. VS2012 확장파일을 다운로드 받습니다.

2. Lardite.RefAssistant.11.0.vxix 파일의 확장자를 *.ZIP 으로 변경합니다.

3. 압축을 풀어서 extension.vsixmanifest 파일을 에디트창으로 엽니다.

4. "[11.0,12.0)" 를 "[11.0,12.0]" 로 수정합니다. (맨 끝 ')'을 ']'으로 수정)

5. 저장하고 다시 압축을 하고 확장자를 *.vsix로 변경하고 더블클릭하여 설치합니다.

 

참조 : https://refassistant.codeplex.com/discussions/451919

'VisualStudio > 추가기능' 카테고리의 다른 글

Visual Studio 2015 확장 기능 사용  (0) 2015.07.31
Visual Studio 사용중인 추가기능  (0) 2014.12.24

DataGridViewComboBoxCell이 클릭 되었을 때, 콤보박스 내용들을 확인하는 코드입니다.

 

 

 

this.grid.CellClick += MultiHeaderGrid_CellClick;

 

 

 

void grid_CellClick(object sender, DataGridViewCellEventArgs e)

{

    if (this.CurrentCell.EditType == typeof(DataGridViewComboBoxEditingControl))

    {

        SendKeys.Send("{F4}");

    }

} 

 

+ Recent posts