Lyn
조회 수 37872 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

지인이 물어온 김에 정리 해 둡니다....



Windows Thread API 는 고성능이지만 치명적인 단점이 하나 있(었)는데... 바로 대기하는 Thread를 몽땅 한번에 다 깨우는 방법이 없다는 겁니다.
Event 객체는 유용하지만 하나의 쓰래드만 깨우거나(오토리셋 이벤트) 아니면 락이 다 풀리거나(메뉴얼리셋 이벤트) 둘중 하나의 동작만을 하게됩니다.


Java에 익숙하신 분이라면 notifyAll을 유용하게 사용하셨을 거고 pthread 라이브러리를 쓰시는 분도 역시 자주 사용 하실 겁니다.


그래서 거기에 대한 몇가지 꼼수를 프로그래밍 하다 보면 만나볼 수 있는데


1. 무한 루프 돌면서 상태를 체크한다 

- CPU 낭비도 이만한게 없습니다.

2. 메뉴얼 리셋 이벤트를 이용해서 잠깐 락을 풀고 다시 건다 

- 락이 걸리지 않고 그냥 지나칠 가능성이 있어 위험합니다.

3. pthread나 ACE에 포팅된 상태변수를 가져다 쓴다 해결책이 아니잖아


실제로 ACE는 상태변수를 자체 구현하고 있는데 그 대략적인 방법은 아래와 같습니다.

1. 오토 리셋 이벤트와 크리티컬 섹션을 생성한다

2. join 할 때 마다 카운트를 증가시킨다

3. 이벤트 발생시 증가된 카운트만큼 이벤트를 Set 한다.



뭐 그리 복잡한 방법도 아니고 구현 자체는 어렵지 않은데...
어쨋든 OS의 부족한 기능을 외부에서 가져오자니 좀 그렇습니다.


어쨋든 Windows Vista/2008 부터는 여기에 대응하는 API가 추가되었습니다.
WakeAllConditionVariable라는 놈인데요. 말 그대로 모든놈 다 깨우라는 뜻입니다.


pthread의 상태변수가 그런것 처럼 상태변수 자체만으론 Lock 의 기능을 하지 않고 다른 락의 힘을 빌리게 되는데 기본적으론 Critical Section 을 사용하게 됩니다.
이 다음은 귀찮으니 소스 보면서 하겠습니다.


#include <Windows.h>
#include <cstdio>

CRITICAL_SECTION cs;
CONDITION_VARIABLE cv;

DWORD PASCAL TestThread(LPVOID pParam)
{
	EnterCriticalSection(&cs);
	
	SleepConditionVariableCS(&cv, &cs, INFINITE);
	printf("%d\n", GetCurrentThreadId());
	LeaveCriticalSection(&cs);

	return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
	InitializeCriticalSection(&cs);
	InitializeConditionVariable(&cv);

	HANDLE Threads[10];
	for(int i = 0; i < 10; ++i)
	{
		Threads[i] = CreateThread(nullptr, 0, &TestThread, nullptr, 0, nullptr);
	}
	Sleep(1000);
	WakeAllConditionVariable(&cv);
	WaitForMultipleObjects(10, Threads, TRUE, INFINITE);
	DeleteCriticalSection(&cs);
	return 0;
}


CriticalSection 에 추가적으로 ConditionVariable 을 초기화 시켜 준 후, WaitForSingleObject 대신 SleepConditionVariableCS을 사용합니다(만약 Read/Write Lock 을 사용중이라면 SleepConditionVariableSRW을 대신 이용합니다)


그리고 Thread가 대기하고 있을때 WakeAllConditionVariable를 이용해서 쓰래드를 몽땅 깨워 주면 됩니다.
당연히 대기중인 Thread가 하나도 없을땐 아무 일도 하지 않습니다.


만약 하나만 깨운다면 WakeConditionVariable를 사용할 수 있습니다.
하나만 깨운다는면에서는 동일하지만 Event 와는 동작이 미묘하게 다른것이 이벤트는 대기중인 Thread가 없어도 Set 상태가 되면 언제라도 통과할 수 있지만 WakeConditionVariable은 대기중인 Thread가 없으면 아무 일도 하지 않습니다.


덤으로 Condition Variable 은 해제 함수가 없습니다. 그냥 냅두시면 됩니다.


TAG •
?

Lyn
조회 수 52275 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

윈도우즈 정기 업데이트 날이죠 (...)


이번엔 꽤 중요한 보안 이슈(원격 실행 취약점)가 해결되었다고 하니 꼭 패치하세요


https://technet.microsoft.com/library/security/ms14-dec

?

Lyn
조회 수 2066 추천 수 0 댓글 0
Atachment
첨부 '2'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

정말 오랫만에 로우레벨 관련 질문을 받았습니다...

바로 아래 코드에서

 

#include <smmintrin.h>

int main()
{
    __m128i m_128i;
    m_128i.m128i_i16[0] = 0;

    for (int i = 0; i < 15; i++)
    {
        auto a = _mm_extract_epi8(m_128i, i); // <-- 컴파일 에러
    }
}

 

error C2057: expected constant expression 에러가 발생 한다는 얘기입니다.

 

_mm_extract_epi8 의 prototype 을 확인 해 보면 extern int   _mm_extract_epi8 (__m128i /* src */, const int /* index */); 입니다. 일반적으론 변수 -> const 로의 변환은 자유로우므로 문제가 없어야 하는데... 오류가 나죠.

 

원인은 간단한데 _mm_extract_epi8 는 C++의 "함수" 가 아니라, 기계어와 매칭되는 Intrinsics 입니다. 저게 선언되어있는 헤더가 smminstrin.h 라는 것에서도 알 수 있지요. 해당명령어는 intel 명령어이니 intel 사이트에서 한번 해당 내용을 검색 해 봅시다

 

inst01.PNG

 

 

몇가지 정보가 나오네요. 해당 Intrinsics 에 대응되는 어셈블리는 pextrb r32, xmm, imm 이고, SSE4.1 지원이 필요하며, Latency 는 CPU 종류에 따라 2~3 클럭이네요.

 

여기는 Visual Studio 에 들어있는 헤더와 달리 각 파라메터에 이름이 붙어있습니다. a, 와 imm8 이네요.
그럼 imm8 은 뭐냐가 중요해지는데, 이 imm은 이름만 보면 무슨 레지스터 비슷한걸로 착각 할 수도 있는데, 실제로는 Immediate value 의 약자입니다.
한자로는 즉치값(즉시 계산되는 값) 이라고도 하는 것 같은데 C++ 프로그래머 입장에서 보자면 컴파일타임에 계산하여 결정이 가능한 상수(const) 를 이야기 합니다. 8은 뭐냐구요? 걍 bit 수 입니다. 저 값은 8bit 범위에서 작동한다는 거죠. 즉 imm8 을 풀어서 써보면 8-bit immediate value 라고 할 수 있겠습니다.

 

그럼 결론을 내보자면. Intrinsics 를 호출 할때는, C++의 호출/캐스팅 규칙 보다 CPU 명령어의 제약사항이 우선하며, _mm_extract_epi8 의 2번째 argument는  Immediate value 일 것을 요구하므로 변수를 사용할 수 없습니다.

 

기왕 하는김에 하나 더 해보자면, imm8 이라고 되어있긴 하지만, 128bit 변수를 8bit 단위로 쪼개서 값을 읽는 명령이므로, 실제 imm8의 사용 범위는 0~15 일 것입니다. 그런데 만약 그 이상의 값(ex : 16) 을 넣으면 어떻게 될까요?

 

 inst02.PNG

 

다행히도 컴파일러는 해당 명령어의 허용 범위를 알고 있으므로 

warning C4556: value of intrinsic immediate argument '16' is out of range '0 - 15' warning 을 띄워 줍니다.

 

TAG •
?

Lyn
조회 수 133 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

TAG •
?

Lyn
조회 수 220 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

Lyn
조회 수 145 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

TAG •
?

Lyn
조회 수 200 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

TAG •
?

Lyn
조회 수 39613 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

볼포 모임에서도 이런저런 얘기 하다 나온거지만...

델파이 / C++빌더 초보들은 웃기는 특징을 하나 가지고 있다.



뭔가 하다가 안된다.

그럼 이렇게 생각한다. '아 이게 델파이의 한계인가'


.... 웃긴다.

그런사람들이 VC를 하면서 똑같은 문제에 부딛히면 이렇게 생각한다 '아 내가 뭘 잘못한게 있나보다'

... 진짜 웃긴다




뭔가 하려고 할때 개발툴 자체에 한계가 있는 경우는 드물다.

(물론 VM 의 한계, Native의 한계 등이 있지만... 이 경우는 애초에 언어선택자체가 잘못된거니까 제쳐두자.)

개발툴 탓하기 전에 자신의 실력을 한번쯤 돌아보길.





근데... 난 델파이 프로그래머 아니잖아.... 안될거야 아마

?

Lyn
조회 수 34299 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

==여기서부턴 내 개인적인 생각이니... 할말있으면 태클 거는건 좋다.==

 

프로그래머에게 앱스토어의 유행이란 과연 무엇일까..

 

 

혹자는 이렇게 말할지도 모른다. 개인 개발자들에게 대박의 기회를 주었다고...

물론 난 대박이란 말을 좋아하지 않는다. 왠지 운으로 된 것이라는 느낌을 강하게 주기때문에. 하지만 여기선 딱히 쓸 말이 없는 거 같아 그냥 대박이라 표현하기로 하자. 내 짧은 어휘력에 저주를 한번 보내주는 것은 좋다.

 

이 얘기는 물론 대박을 친 사람이 있다는 얘기는 아니다.

난 아직까지 앱스토어에서 대박친 사람을 본 적이 없다. 기껏해야 중박정도랄까. 애시당초 큰 돈을 벌 수 있는 시스템이 아니다.

그리고 앱스토어는 이제 개인 한두명일 달라붙을 수 있는 시장이 아니라 규모를 갖춘 팀이 아니면 승부를 하기 힘든 시장이다.

 

 

내가 말하고싶은건 뭐냐...

프로그래머에게 앱스토어는 저주나 다름없다는 것이다. 적어도 한국에서는..

공짜 혹은 비싸봐야 천원내지 수천원 이건 무슨 의미냐. 프로그램은 "싸다" 라는 인식을 사람들에게 박아준 것 이외엔 아무것도 아니다.

프로그램은 엄청난 인건비를 소모 해야만 만들 수 있다. 그런것이 천원 이천원에 팔린다는것은 가치를 우리 스스로 무시한 것 외에 아무것도 아니다.

 

프로그래머들의 재미있는 장난감이 될 수는 있다 앱스토어가. 하지만 재미삼아 만들었으면 그것으로 끝내라. 그걸 싼값에 공개하는건 우리 스스로 가치를 깎아먹는 것 밖에는 안된다. 

 

중급개발자가 월급이 300만원이라고 하면 시간당 2만원을 버는셈인데... 그것을 1달러(대충 1000원으로 치자) 에 판다고 하자.

아이폰 앱스토어에서 100개 이상 팔리는 어플의 비율이 10% 정도라고 하는데... 상위 10%의 어플을 만들어 냇다고 치자. 그럼 10만원을 버는 셈이다. 당신이 그걸 5시간 이내에 완성한 것이 아니라면 완전한 손해라고 밖에 할 수 없다.

?

Lyn
조회 수 27590 추천 수 0 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

Devpia에 자꾸 질문이 올라와서 정리 해 둔다 ...


1. 32bit 프로그램에서는 64bit DLL을 사용할 수 없다. 반대도 마찬가지


2. 32bit 프로그램에서는 64bit ActiveX를 사용할 수 없다. 역시 반대도 마찬가지.


3. 64bit OS에서 32bit 프로그램이 Windows\System32에 접근하면 Windows\SysWOW64로 리다이렉트 된다. 


4. 32bit 프로그램에서는 64bit 프로세스의 정보를 얻어올 수 없다.


5. 64bit OS에서는 32bit 로 된 ShellExtension 을 띄울 수 없다. 단 32bit 프로그램이 ShellAPI로 ShellExtension 을 띄우려면 32bit용 ShellExtinsion 이 설치되어 있어야 한다(간단히 말해서 32/64 둘다만들란 소리다!)


6. ODBC는 32bit 와 64bit를 따로 등록해야 한다(64bit 의 제어판에 있는건 64bit 용 ODBC다. 32bit용은 SysWOW64에 가서 실행해야 한다)

한쪽만 등록할 경우 bit가 다르면 안보인다.


7. 윈도우 서비스는 공통이다. 신경 안써도 됨

?
  • ?
    ssonacy 2012.07.21 01:01

    64bit  프로세스는 32bit DLL 를 로드 할수 없다구요 ?

    흠 ...??

  • profile
    Lyn 2012.07.21 21:30

    네 없습니당


2012.02.20 07:45

[작성중] 알려진 포트

Lyn
조회 수 24616 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

TCP


21 : Ftp

22 : SSH

80 : Http

443 : Https

3389 : RDP (Windows 원격 데스크탑)


?

Lyn
조회 수 25124 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

1. v8 빌드


2. 사용법



?

Lyn
조회 수 24596 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
<작성중>
소스는 첨부파일에. 
#include <cstdio>
#include <windows.h>
#include "Coroutine.h"
 
class NumberCount : public Coroutine<int>
{
protected:
	void Execute() override
	{
		for (int i = 0; i < 100; ++i)
		{			
			yield_return(i);
		}
	}
};
 
class NumberPrint : public Coroutine<void>
{
protected:
	void Execute() override
	{
		for (int i = 0; i < 100; ++i)
		{		
			printf("NumberPrint : %d\n", i);
			yield;
		}
	}
};
 
void wmain()
{	
	ConvertThreadToFiber((LPVOID)GetCurrentThreadId());
	
	NumberCount Co1;
	NumberPrint Co2;
 
	for (int i = 0; i < 100; ++i)
	{
		printf("NumberCount : %d\n", Co1.Resume());
		Co2.Resume();
		Sleep(1000);
	}	
}
 

?

2012.08.17 10:36

[윈도8] 윈도8 구경1

Lyn
조회 수 26509 추천 수 0 댓글 1
Atachment
첨부 '2'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

얼마전 MSDN 에 정식으로 올라온 윈도8 입니다.
Enterprise 버전은 라이센스가 없어서 Pro로 설치 했네요


Untitled.png


슬슬 제대로 둘러봐야 겠지만 첫인상 아주 좋습니다.
빠릿빠릿해요 그냥


아직 호환성이 걱정되는 놈들이 있어 Win7하고 듀얼부팅을 세팅 해 뒀는데... OS 선택 메뉴가 아주 화려하네요.


dual boot.png

?
  • ?
    사무엘 2012.09.12 03:22
    윈8.. 윈도우 XP 이래로 트렌드이던 둥근 모서리가 없어지고,
    제목이 창 제목의 왼쪽이 아니라 가운데에 찍히는 디자인이 윈도우 3.x 이래로 다시 부활했고,
    그러데이션이 그냥 단색(solid color)로 바뀌는 등..
    모바일을 의식해서 그런지 디자인이 좀 더 검소해지고 단순해졌지요. 단순히 변화만을 위한 변화인 것도 느껴지더군요.

    일부 너무 급격한 변화는 왜 이런 걸 만들었는지 의문이 드는 것도 있습니다.
    참, MS 오피스는 2007 이래로 진작부터 제목이 가운데에 찍히는 스타일로 회귀했지요. ^^

?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

Windows 가 유니코드 기반의 OS가 된지 데스크탑 OS만 따지면 무려 15년, 기업용 워크스테이션 OS까지 따지면 그 이상이 지났고, High DPI 지원도 비슷한 시간을 보내 왔습니다.

 

그나마 High DPI 의 경우 꽤 오랜기간 96DPI 를 넘는 고해상도 장비가 나오지 않았으니 그나마 정상참작(?) 의 여지가 있긴 했지만 적어도 2016년 현재 시점에는 오히려 96DPI 해상도의 장비를 보기가 더 힘든 지경입니다(특히 모바일에서는)

 

하지만 MS Windows 는 그 이후 새로 나온 플랫폼도 아니고, OSX 처럼 레거시 API를 완전히 배제하여 호환성을 포기하지도 않은 덕분에, 아직까지도 이 두가지를 전혀 신경 쓰지 않은 어플리케이션이 꽤 많이 돌아다니고 있습니다. MS에서는 프로젝트 생성시 디폴트를 유니코드로 바꾸고, 심지어 최신의 VS에서는 아예 Non-Uncode 버전의 MFC 를 탑재하지 않는 강수를 두었음에도 궂이 프로젝트 옵션을 바꿔가면서까지 유니코드를 사용하지 않는 개발자들이 있습니다.

 

그래서 제발! Windows Application 의 퀄리티가 올라가길 바라는 심정으로, 이 두가지를 무신경하게 취급하는 SW 를 한번 정리 해 보고자 합니다.

 

단 아래와 같은 경우는 배제하겠습니다.

 

1. SW가 마지막 업데이트가 된지 3년이 넘은 구형 SW

 

 

전체목록 : 

http://lunapiece.net/Article/14007794 : 1. Windows Service Manager

http://lunapiece.net/Article/14007798 : 2. NAVER Font Installer

http://lunapiece.net/Article/14007820 : 3. OpenVPN GUI Client

TAG •
?

Lyn
조회 수 1988 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

afree.png

 

TAG •
?

Lyn
조회 수 2331 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

게임 결제 한번 하기 힘드네요....

 

Untitled.png

 

TAG •
?

Lyn
조회 수 4752 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

ov.PNG

 

네 3번째는 OpenVPN GUI Client 입니다.

High DPI 지원을 하지 않아, 강제확장 기능이 없는 구버전의 OS에서는 읽을 수 없는 크기의 로그를 (....) Windows 10 에서는 흐릿하게 보이는 로그를 자랑 하고 있습니다.

 

역시 얘도 그다지 자주 볼 화면이 아니니 상관은 없지만 무신경한건 마찬가지죠

TAG •
?

Lyn
조회 수 4661 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

NF.PNG

 

두 번째는 네이버에서 배포하는 네이버 폰트 인스톨러입니다.

Uncode 지원을 하지 않아 박살나는 한글과, 역시 High DPI 지원을 하지 않아 흐릿하게 보이는 글씨를 볼 수 있습니다.

아무리 한국어OS 사용자가 사용할 가능성이 99%가 넘는다 해도 한국 최고의 IT 대기업 치고는 너무 무신경하네요.

TAG •
?

Lyn
조회 수 4323 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

WSM.PNG

 

첫 타자는 Windows Service 관리도구입니다.

MS의 OS 의 일부임에도 불구하고 이놈은 최신의 WIndows 10 에서 조차 HighDPI 에 대한 처리가 전혀 되어 있지 않습니다 (...)

아무리 일반인이 자주 보지 않는 프로그램이라곤 하지만 좀 MS의 무신경함은 좀 심하네요.

TAG •
?

Board Pagination Prev 1 2 3 4 5 6 7 ... 8 Next
/ 8