|
우선 답글 너무 감사합니다 많은 도움이 되었습니다.
한가지 아직 이해가 잘 안되는게 있는데..
그렇다면 쓰레드를 사용하지 않고 타이머 두개를 동시에 돌릴수 있는 방법이 있을까요?
아무리 해도 두가지 이벤트를 동시에 실행시키면
하나의 이벤트의 타이머가 끝날때까지 다른 하나의 이벤트의 타이머는 대기 하고 있다가
끝나면 실행되더라구요..
답변 좀 부탁드립니다..
장성호 님이 쓰신 글 :
: 먼저 컴퓨터에서 프로그램이 동시에 돌아갈수는 없습니다.
: 쓰레드로 돌려도 동시는 아닙니다.
:
: 윈도우에 프로그램이 여러개 떠있어
: 여러 프로그램이 동시에 실행되서 돌아가지만
:
: 사실은 윈도우가 아주 짧은시간간격으로
: 쓰레드단위로 조금씩 cpu자원을 쓰레드에 할당해주는겁니다.
: 사람은 못느낄 정도로..
: 애쪼금, 제쪼금,게쪼끔...
: 이런걸 멀티테스킹이라고 그러죠..
:
: 그런데 어떤 프로그램이 while문에 빠져서 못나오고 있다면
: 그 프로그램이 cpu자원을 너무 많이 쓰기때문에
: 원도우전체가 버벅 거리게 됩니다.
:
:
: 서론이 길었네요
: 타이머에서
:
: 1.
: 타이머가 두개일때 하나씩 이벤트 핸들러 함수가 호출됩니다. 차례차례
: 타이머를 두개 올려놓고 각 1초 씩 주고
: 둘중 하나의 타이머 핸들러 함수에서 Sleep(3000) 3초 정도 줘 보십시요
: 그리고 이벤트 발생하면 Label에 Count하면서 뿌려보십시요
:
: 1번 타이머는 천천히 돌고 2번 타이머는 빨리돌까요?
: 아닙니다 같이 올라갑니다.
:
: Sleep(3000)동안 아무 작업을 안하는 겁니다.
:
:
: 2. 그리고 하나의 타이머에서 타이머가 1초짜리인데
: 작업하는 시간이 3초 걸리면 작업중에 또 이벤트가 발생할까요?
: 아닙니다.
: 작업이 끝나야 이벤트가 발생합니다.
: 그리고 끝나고 1초후에 발생하는것이 아니라 곧바로 이벤트가 발생합니다.
: 왜냐면 3초작업동안 이미 interval 1초가 지났으니까요..
:
: 3. 1초짜리 타이머에서 작업이 3초 걸리는경우 작업중에 다시 타이머 이벤트가 발생하려면
: 작업 중간중간에 Application->ProcessMessages();를 넣으면 가능합니다.
: 그러나 그렇게 하면 재귀함수 비슷하게 되므로 문제가 있습니다.
: 절대 Timer이벤트 함수안에 Application->ProcessMessages();넣지 마시길
:
: 4. Application->ProcessMessages();를 Timer핸들러 함수에 넣을수도 있어요
: 그런경우엔 Timer 함수 시작부분에 Timer1->Enabled=false 한후
: 함수 끝에 Timer1->Enabled=true 하는식으로 하시길...
:
:
:
|