수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1695057
  • Today | 802
  • Yesterday | 606

Programming/Win32 API2007/03/22 17:24

SendMessage는 어떻게 작동하는가?

원본 : http://www.debuglab.com/knowledge/sendmessage.html

1. 요약

SendMessage()의 내부적인 작동에 대해서 설명 드리려고 합니다. 내용도 짧고 꼭 필요한 것이므로 읽어두시기 바랍니다.


2. 본문

SendMessage()의 반환값은 메시지를 받는 윈도우의 프로시져가 반환하는 값과 같습니다. 다시 말해서 SendMessage()는 메시지를 받은 윈도우가 다 처리를 한 후에야 반환하게 됩니다. 이 말은 또 여러가지 의문을 갖게 합니다. 그렇다면 윈도우 프로시져를 직접 호출한 것과 어떻게 다른가? 다른 프로세스에 사는 윈도우에게는 어떻게 전달될 수 있는가 등등..

필요하다고 생각되는 내용을 적어보았습니다.

일단 SendMessage()를 호출한 스레드와 메시지를 받는 윈도우를 생성한 스레드가 같다면 실제로 SendMessage()는 직접 윈도우 프로시져를 호출한 것과 크게 다르지 않습니다.

그러나 다른 스레드가 생성한 윈도우에게 보내는 경우라면 다음과 같은 단계를 거치게 됩니다.

1.메시지를 받는 윈도우를 생성한 스레드의 Sent Message Queue에 메시지가 추가됩니다. ( 이는 QS_SENDMESSAGE 플레그를 세팅한 효과를 갖습니다)

2.받는 스레드가 다음 번 메시지를 받아올 준비가 되었을 때, QS_SENDMESSAGE 플레그가 세팅되어 있다면 Sent Message Queue에서 메시지를 꺼내옵니다.

3.메시지 핸들러의 처리가 끝나면 메시지를 보낸 스레드의 Reply Message Queue에 결과를 추가합니다.

4.메시지를 보낸 스레드는 자신의 Reply Message Queue에 메시지가 들어올 때까지 기다리고 있었습니다. 이제 새 메시지가 들어왔으므로 넘겨온 값과 함께 SendMessage() 를 반환합니다.

크게 놀랄만한 사실은 없습니다만, 한 가지 더 알아두어야 할 사실이 있습니다. 스레드가 SendMessage()를 호출하고 블로킹되어 있는 동안에 다른 스레드로부터 SendMessage 받는다면 이 메시지를 처리할 수 있습니다.

하지만 SendMessage()로 인해서 문제가 생길 가능성이 충분히 있습니다. 그 문제를 해결하는 데 쓰일 네 가지 함수를 적어보았습니다.

SendMessageTimeout() 

SendMessageCallback() 

SendNotifyMessage() 

ReplyMessage() 

자세한 것은 MSDN을 참조해보시기 바랍니다.

감사합니다.


3. 예제 코드

없슴


4. 참조

Advanced Windows Programming ( Chap.11)



- 2001.08.19 Smile Seo -

"Win32 API" 카테고리의 다른 글
  • Top 윈도우들의 핸들을 알수 없을까? (0)2007/03/23
  • 친절한 메세지 ( benign message ) (0)2007/03/22
  • SendMessage는 어떻게 작동하는가? (0)2007/03/22
  • 함수의 호출 규약에 대해서 알아봅시다 (0)2007/03/22
  • Visual C++ 이 사용하는 확장자 살펴보기 (0)2007/03/21
2007/03/22 17:24 2007/03/22 17:24
Posted by webdizen
Tags SendMessage
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2726

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1 ... 523 524 525 526 527 528 529 530 531 ... 3009  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 캐시 적종
  • Messaging
  • 메소드 오버로딩
  • 컨테이너
  • 음악 치료
  • 양주 가격
  • NAP
  • 제3기숙사
  • 데이터 정렬
  • Code
  • Windows Communication Foundation
  • 객체 비지향
  • 혓바늘
  • Zlib
  • 소교
  • Collaboration
  • 톨스토이
  • 구글
  • CodeIgniter
  • 스탠포드

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 경청... 너무나 중요한데.......
    webdizen 14:59
  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Polarux - Linuxing
      • Rodman®
      • 까만 나비
      • 나를 가꾸는 시간.
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.