Microsoft MVP성태의 닷넷 이야기
이벤트 핸들러와 쓰레드의 관계 2 [링크 복사], [링크+제목 복사],
조회: 19493
글쓴 사람
임동찬 (techsharer at outlook.com)
홈페이지
첨부 파일

아래 답변 감사드립니다.
링크 주신 게시글 보며 확인해봤는데
아래 두가지 점에 대해 궁금합니다.

1. 첫번째 링크의 예제에서 이벤트를 2개 아닌 1개만 등록시키면,
   watch창에서 _invocationCount가 1이 아닌 0으로 나오네요?
   reflection을 통해서는 1개 등록시에도 잘 나오구요.
   (.net framework 내부에서 2개 이상일때만 _invocationList를 통해 관리하는 건지...?)

2. 위와 같이 테스트 해도 원래 질문은 해결되지 않네요.
   첨부파일은 첫번째 링크 예제에 event를 주기적으로 fire시키도록 추가한 예제인데,
   실제 디버그모드에서 thread 창을 열어두고 계속 핸들러쪽으로 브레이크 포인트 잡아보면,
   하나의 worker 쓰레드가 아닌 여러개(보통 3개 내외) 쓰레드에서 핸들러가 실행됨을
   확인할 수 있습니다. 왜 그럴까요? 알려주신 방법으로는 명확하게 1개의 구독자만 등록됨을
   확인할 수 있지만 쓰레드는 왜 여러개에서...?








[최초 등록일: ]
[최종 수정일: 1/13/2010]


비밀번호

댓글 작성자
 



2010-01-13 11시34분
[임동찬] 첨부가 안되네요. 저희쪽 문제인듯. 메일로 보냅니다.
[guest]
2010-01-13 07시48분
1. 넵. 한개일 때는 단순히 delegate 변수에 대입해서 처리하는 것 같고, 2개 이상일 때에만 리스트로 관리하는 것 같습니다.
2. 보내주신 예제에서는 여러 개의 쓰레드에서 무작위로 실행되는 것이 맞습니다. 왜냐 하면 Systerm.Timers.Timer 는 내부적으로 쓰레드 풀의 쓰레드를 이용해서 이벤트 핸들러를 호출하기 때문입니다. 만약, UI 쓰레드에서 이벤트 핸들러가 실행하도록 하고 싶다면 System.Windows.Forms.Timer 를 이용하시면 됩니다.
kevin25
2010-01-13 08시19분
[임동찬] 타이머 핸들러가 아닌 테스트 이벤트 핸들러가 그런데요??
[guest]
2010-01-13 10시29분
일반 핸들러가 fire 되는 코드가 timer 이벤트 핸들러 안에 있으니 마찬가지입니다.
timer 이벤트 핸들러가 쓰레드 풀로부터 선택된 쓰레드 위에서 실행되고 있고, 그 내부의 코드 역시 그 쓰레드가 실행하고 있으니까요. 이벤트 핸들러는 "단어" 자체가 이벤트 핸들러일 뿐 그냥 함수 호출이라고 보시면 됩니다. 즉,

private void tickTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
test.TestFire();
}

는,

private void tickTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
test_TestEvent(...);
}

라고 보시면 됩니다.
kevin25

... 16  17  18  19  20  21  22  [23]  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
5332질문요5/15/202014054TcpListener TcpClient 문의 [4]
5331sdd5/13/202014122안녕하세요 Settings관련하여 질문드립니다. [2]파일 다운로드1
5330하태5/7/202019096안녕하세요! 질문 드리겠습니다! C# dll에서 c++ CLR프로젝트를 참조 추가 할 수 있나요? [2]
5329김태령4/21/202013889젠킨스에서 원격 머신에 있는 실행 파일을 실행하면 백그라운드로 뜹니다 [2]
5328crea...4/17/202013945안녕하세요! [3]파일 다운로드1
5327김동욱4/17/202014676HttpListener 사용시 HTTP/2 질문입니다. [2]
5323나그네4/15/202013950해결 115p 네임스페이스의 ConsoleApp1.exe는 netcoreapp3.1 폴더에 있었습니다. [1]파일 다운로드1
5322나그네4/14/202014280질문 115p 네임스페이스의 ConsoleApp1.exe 컴파일 또는 빌드방법 [2]파일 다운로드1
5321나그네4/14/202016225오타인가요? [2]
5320kiki...4/10/202019228C# Serial 통신 관련 질문 입니다. [5]
5318이승준4/9/202015561동영상 관련 업계 근황? 입니다. [1]
5317kskk...4/7/202017766OpenCV 이용 해상도 설정 질문 입니다.. [3]
5316윤현수4/7/202014258pipe 비동기방식 질문 [1]파일 다운로드1
53154/6/202015063dll파일 로드 원리? 부분에서 도움받고싶습니다. [3]
5314강성욱3/31/202017445메서드 내에서 await 2번 등장할 때의 이해 [11]파일 다운로드1
5313강성욱3/27/202014948await 2번 [1]
53121a2a...3/20/202014146Re raw data write 질문 관련 [1]파일 다운로드1
53111a2a...3/20/202015950Raw data write 관련 질문 [1]파일 다운로드1
5310아스파넬3/15/2020157321초에 5회 함수호출 제한 관련 질문입니다. [1]
5309하태3/11/202017685안녕하십니까. c# Winform UI 질문드리겠습니다! [3]파일 다운로드1
5308질문3/9/202016520Window XP SP3 32bit 환경(Window Update 모두 완료)에서 .Net Framework 4.0.3 으로 빌드된 .dll 파일 gacutil.exe 등록 관련 문의 [5]
5306개발자3/9/202015677C#을 통해 인터넷 접속 가능한 이더넷을 선택할 수 있는지요? [1]
5305JaeS...3/9/202014650RAW파일 생성 질문드립니다 [8]파일 다운로드1
5303궁금하당2/27/202017714C#에서 C++ DLL읽기 (아래 글쓴이) [1]
5302궁금하당2/27/202019841C#에서 C++ DLL호출 ('PInvokeStackImbalance') [4]파일 다운로드1
5301질문합니...2/27/202014545소켓 대량 데이터 디자인 문의 [1]
... 16  17  18  19  20  21  22  [23]  24  25  26  27  28  29  30  ...