2009. 11. 13. 15:21

DECODE
값을 비교하여 해당하는 값을 리턴


구문
DECODE(column,조건,실행,조건2,실행2,...기본값)

예문
select decode(i_name, "홍길동", 1, 0) VALUE
from table1
where i_no = "12345678"

table1 에서 i_no의 값이 "12345678"인 필드의값을 추출해서 i_name이 홍길동이면 1, 아니면 0 을 VALUE로 리턴

결과 (i_name = "홍길동")
VALUE
1
Posted by 해비
2009. 11. 13. 15:21

NVL
값이 NULL일 경우 기본값으로 치환 합니다.

구문
NVL(column, default_value)
column 칼럼입니다.
default_value 지정되어질 기본값 입니다.

예문
NVL(num1, 10)
num1이 Null 일 경우, 10으로 치환
Posted by 해비
2009. 10. 1. 12:47

개발환경
- Visual Studio 2005 (SP1)
- Windows Vista Home Premium K (32-bit)




폼 디자인...
뭐 특별한건 없고 그냥 간단간단 설정좀 했습니다.
textBox1 만 있고 나머지는 그냥 배치만...

그림에 빠졌는데 반복횟수란 글자는 레이블(Label) 컨트롤 배치해 놓은것 입니다.


윗 부분에 쓰레드 사용을 위한 네임 스페이스를 지정해 줍니다.


Form1 클래스의 상단에 프로그램 전체에서 사용될 변수를 선언해 줍니다.
여기서는 쓰레드 3개를 사용하는 것으로 합니다.


Form을 더블클릭 하면 폼의 로드 이벤트로 넘어갑니다.
여기서 반복 횟수 입력 상자에 디폴트로 지정된 반복 횟수(th_Count)를 출력해 줍니다.

textBox1 에 실제로 내용을 출력해 주는 부분입니다.
쓰레드 내에서 이 함수에 값을 넘기면, textBox1에 내용을 추가하고 줄 바꿈 하는 형식으로 되어있습니다.

쓰레드가 반복횟수를 다 채우게 되면 하게 될 작업 입니다.

디자인 폼에서 button1 을 더블클릭 하면 button1의 클릭 이벤트로 넘어옵니다.
여기서 기본적인 셋팅과 함께 각 쓰레드들을 시작 시키는 일을 합니다.

- 현재의 반복횟수를 나타내는 변수 i 를 0으로 초기화 시킵니다.
- th_Count(반복횟수 지정)변수에 textBox2 에 입력된 숫자값을 입력합니다. (문자이면 ?)
- textBox1 을 클리어 시킵니다. (이전에 동작된 내용을 삭제)
- 쓰레드 동작중에 쓰레드 시작을 하게되는 button1 과 반복횟수 입력 되는 textBox2 를 건드리지 못하도록 Disable 시킵니다.

* textBox2 에 문자값이 들어가더라도 걱정할 이유는 없습니다.
소스코드에 보면 button1_Click 이벤트의 제일 첫 줄에 try 가 쓰이고 있습니다.
기본적인 형태는
try
{
//작업내용...
}
catch { }
입니다.

try 구문에 있는 작업 내용을 실행하되, 중간에 오류가 발생하면 그 시점에서 catch 구문으로 던져버립니다.
그런데 catch 에서 할 내용은 아무것도 없이 비워놓았으니 그냥 끝나버리게 됩니다.
만약 try catch 없이 그냥 본 내용이 들어갔을 경우, 문자값이 textBox2에 들어가면 뭔가 오류 메시지 박스가 뜨겠지요;;

경우에 따라서 try catch 에서 catch 구문에 친절하게 오류발생시 작업내용(오류 알림 상자... 등)을 작업하여도 됩니다.

쓰레드 th1, th2, th3 에서 수행할  AA(), BB(), CC() 입니다.
내용은 같습니다.
다만 출력할 때, 어느 쓰레드에서 작업한 내용인가를 알려주기 위한 문자값과, 쓰레드 시작 플래그 값만 조금 다를 뿐입니다.

- 일단 쓰레드가 시작되면 i의 값을 1 증가 시킵니다.
- 그리고 문자형 변수에 i의 값을 기록하고
- sPrint 함수에 현재 쓰레드를 알려줄 문자와 함께, 그 값을 던져 textBox1 에 출력 되게 합니다.
- i 의 값이 반복횟수 카운터(th_Count)의 값 이상이 되면 Reset_Ctrl() 함수를 호출하여 쓰레드를 중단 시킵니다.

폼이 종료 될때 해야 할 일을 기술하기 위해 Closing 이벤트를 생성해야 합니다.

폼 디자인 에서 폼을 선택한 후, 속성창에 보면 번개모양(이벤트) 아이콘이 있습니다.
여기서 FormClosing 부분을 찾은다음, 옆부분에 커서가 위치한 부분의 공란을 더블클릭 하여 줍니다.

그리하면, Form1 의 Closing 이벤트로 넘어옵니다.
여기서 할일은 쓰레드를 중단 하는것 입니다.

폼(Form1)이 종료될 때 쓰레드의 시작 플래그를 false 상태로 만들고, 쓰레드를 중단시킵니다.

컴파일 후, 실행하면 이렇게 나옵니다.
여러 개의 쓰레드가 동시에 동작을 하면서 sPrint()함수 에서 미처 줄바꿈을 실행하기도 전에 다른 쓰레드로 부터 값이 마구 들어와서 생기는 문제입니다.

다음과 같이 수정해 봅시다.
textBox1에 문자 기록하고 줄바꿈 하는 작업에 lock()을 씌워 봅시다.

그리고 다시 실행을 하면...
이제야 뭔가 형태를 갖춰서 실행이 됩니다.

lock() 을 걸게 되면 lock()이 풀릴때 까지 그 내부 코드에 다른 코드가 간섭을 못하게 잠금처리 해주는거 같아보이는 군요...

그런데... 순서가 좀 이상하죠? 숫자의 순서가 뒤죽박죽 입니다.
그럼 다른 부분에 잠금 처리를 하여 보겠습니다.

일단 sPrint 부분의 lock() 을 다시 제거 하여 줍니다.

변수 i 의 값을 증가 시키고 출력 시키는 부분에 lock()를 걸어 봅시다.
여기서는 AA() 의 수정된 코드만 표시합니다만, 실제로 BB()와 CC()도 이렇게 수정하여야 합니다.

변수 i의 값을 증가 시키고, 문자형으로 변환, 출력 하는 부분을 lock 으로 감싸서 도중에 다른코드로 부터 간섭을 받지 않도록 수정하였습니다.

이제 실행하게되면...
숫자가 정상적으로 순서대로 출력되는 것을 볼 수 있습니다.

숫자 앞의 쓰레드 문자는 랜덤 입니다.
실행 할때 마다 다른 쓰레드가 뜬다는거죠...

근데 한가지... 300 번 반복 시켰는데 302 ??

여기 올리지는 않았지만 쓰레드 1개를 제거하고 다시 돌리니 301 까지 뜨는것으로 봐서 쓰레드 3개 가 동시에 돌다가 중단 처리 하는 과정에 나머지 2개가 미처 실행중이던 내용을 기록하는게 아닌가 추측해 봅니다.



*** 위에서 AA(), BB(), CC() 부분은 내용이 거의 비슷비슷 합니다.
이것을 좀더 간단하게 만들어 봤습니다.
th_work() 함수를 작성하여 그것을 호출하였습니다.

실컷 다 만들어 놓고 다 써놓고 나서 생각나서 걍 생각나는대로 끄적여 봤습니다. ^^
저렇게 바꿔도 결과는 동일 합니다.

Posted by 해비
2009. 9. 20. 19:37



프로그래스 바를 활용한 쓰레드 예제 프로그램 입니다.
반복 횟수는 상단의 텍스트 상자를 활용해서 자유롭게~~~ 조절(?)이 가능합니다.

개발 환경
- Visual Studio 2005 (SP1)
- Windows Vista Home Premium K (32-bit)


내부 예제
- 스레드 생성 및 활용 (1개의 서브 쓰레드 생성)
- 쓰레드 중단 및 재개 (Pause 버튼과, Resume 버튼으로 제어)
- 실수 연산 및 결과를 소숫점 2째 자리 까지 잘라서 표현


메모
- 소스 내부에 주석이 달려있으며, 내용중 잘못된 부분 또는 버그가 존재 할수도 있습니다.

- 반복루프문 동작중에는 CPU점유율이 좀 높습니다.

- 이유는 잘 모르겠지만, 그 비주얼 스튜디오 디버깅 상태에서는 카운트 횟수가 올라가질 않더군요
  (Debug 폴더 안의 파일을 더블클릭 해서 실행 시키면 정상 동작 합니다.)

- 경고가 3개 있는데 아직 수정할 능력이 되지를 않네요 ㅎㄷㄷ
  suspend 1개, resume 2개 인데, 이거 쓰지 말고 다른 방법으로 하라는거 같은데 좀더 알아 봐야 되겠네요...

- [09/09/21] 패치에서 중단, 재개 기능은 쓰레드를 중단 시켰다가 새로이 초기화 해서 동작하는 방향으로 틀어버렸습니다.

- 변수는 전역변수 인지라 앞의 쓰레드가 하던 작업이 그대로 저장되어있다는 걸 이용한건데 이래도 되는건지...



수정
[09/09/21]
- 종료 관련 문제가 있어 Suspend와 Resume를 아예 빼버렸습니다 (-_-)

[09/09/20 - #2]
- 중단한 상태에서 종료시 프로세서가 계속 남아있는 문제를 수정하였습니다.



C# 접한지 얼마 안되는 초보 입니다. JAVA 책 보다가 갑자기 C# 할일이 생겨서 말이죠...
쓰레드 라는것을 처음 접하면서 책, 인터넷 뒤져가며 예제로 만들어 본 것인데...
고작 이거 하나 만들고 주말이 지나가 버렸네요 -ㅅ-;;

잘못된 부분 지적 환영합니다(^^)


주석부분, 제작자 부분 을 무단 수정하여 재배포 하는 일은 자제해 주시기 바랍니다.
Posted by 해비
2009. 4. 14. 04:21
사용자 삽입 이미지
New Memorive Slim 8G

아직까지 잘 사용중인 아이템중 하나...

크롬칠... 생각보다 의외로 잘 벗겨져서 지저분 하게 보이는게 흠이긴 하지만... 8G의 빵빵한 용량은 나름 만족~!
Posted by 해비
2009. 4. 14. 04:13
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

그냥 작업용으로 사용할 목적으로 구입한 세컨드 PC임...

세부사양
C/S : GMC 풍2
P/W : GMC 400와트
M/B : 기가바이트 GA-MA69G-S3H
CPU : AMD 애슬론64-X2 브리즈번 4600+ (2.4G)
RAM : 삼성 DDR2 1GB (PC-6400) x2
VGA : ATI Radeon X1250, IGP(보드 내장, 128MB 공유 메모리)
HDD : 씨게이트 250G S-ATA2
ODD : 파이오니아 DVR-215BK



ODD는 컴퓨터 도매상가에 없어서 별도 주문을...
사용자 삽입 이미지

Posted by 해비
2009. 4. 14. 04:06
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

지하철로 추정되는것이...

Fly Incheon 이라는 문구가 적혀있었음!!

밀양역에서 발견...


Posted by 해비
2009. 4. 14. 04:01
사용자 삽입 이미지
아직 공사중인... 지금은 굿플러스가 들어선 그자리...


Posted by 해비
2009. 4. 14. 03:59
사용자 삽입 이미지
소리가 전~혀 안나서 ㅂㅂ이.....

보내버리고 새로 한대 장만함

저거 나왔을 당시에는 뚜껑이 180도 돌아간다고 유명했었는데 이젠 뭐 -ㅅ-''


Posted by 해비
2009. 4. 14. 03:55
사용자 삽입 이미지

무늬.... 는 아니고...
통학버스의 커텐 -ㅅ-;;
Posted by 해비