๋ฐ˜์‘ํ˜•

์ž‘์—…์ž ์Šค๋ ˆ๋“œ? ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์Šค๋ ˆ๋“œ?

MFC Application์—์„œ ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ๋ชฉ์ ์— ๋”ฐ๋ผ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ž‘์—…์ž ์Šค๋ ˆ๋“œ(Worker Thread)
  • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์Šค๋ ˆ๋“œ(User-Interface Thread)

๊ตณ์ด ์ด๋ ‡๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆˆ ์ด์œ ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ์š”?

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ ๋ฉ”์ธ UI ์Šค๋ ˆ๋“œ ๋‚ด์—์„œ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ์š”. ํ”„๋กœ๊ทธ๋žจ ๋‚ด์˜ ๋ฒ„ํŠผ๊ณผ ๊ฐ™์€ ์ปจํŠธ๋กค์˜ ์ด๋ฒคํŠธ ๊ทธ๋ฆฌ๊ณ  OnPaint๋‚˜ Key ์ž…๋ ฅ ๋“ฑ์˜ ์ด๋ฒคํŠธ๋“ค์ด ๋ฉ”์ธ UI ์Šค๋ ˆ๋“œ์—์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด ์Šค๋ ˆ๋“œ ๋‚ด์—์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ์ปจํŠธ๋กค์— ์ ‘๊ทผํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

UI ์Šค๋ ˆ๋“œ์—์„œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•  ์ž‘์—…์ด ๋‹ค๋ฅธ ์ž‘์—… ์Šค๋ ˆ๋“œ์—์„œ ์ˆ˜ํ–‰๋˜๋ฉด, ํ”„๋กœ๊ทธ๋žจ์ด ๋น„์ •์ƒ ๋™์ž‘ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๊ฒฝํ—˜์ƒ์œผ๋กœ, ๊ฐฑ์‹ ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ฑฐ๋‚˜ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ํ˜น์€ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ๊ฒช์€ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก , ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋˜๋„๋ก์ด๋ฉด ๋ชฉ์ ์— ๋”ฐ๋ผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

์œ„์—์„œ ์„ค๋ช…๋“œ๋ฆฐ ๋‚ด์šฉ์€ MFC์—๋งŒ ๊ตญํ•œ๋œ ๋‚ด์šฉ์ด ์•„๋‹™๋‹ˆ๋‹ค. C#์—์„œ๋Š” ์ž‘์—…์ž ์Šค๋ ˆ๋“œ์—์„œ ๋ฉ”์ธ ํ”„๋กœ๊ทธ๋žจ์˜ UI ์ปจํŠธ๋กค์— ์ ‘๊ทผํ•˜๋ฉด 'ํฌ๋กœ์Šค ์Šค๋ ˆ๋“œ'์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. '์ปจํŠธ๋กค์ด ์ž์‹ ์ด ๋งŒ๋“ค์–ด์ง„ ์Šค๋ ˆ๋“œ๊ฐ€ ์•„๋‹Œ ์Šค๋ ˆ๋“œ์—์„œ ์•ก์„ธ์Šค ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.'๋ผ๋Š” ๋‚ด์šฉ์ธ๋ฐ์š”. ์ฆ‰, ๋ฉ”์ธ UI ์ปจํŠธ๋กค์€ ๋ฉ”์ธ UI ์Šค๋ ˆ๋“œ ๋‚ด์—์„œ๋งŒ ์ž‘์—…์„ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ์—์„œ๋Š” ๋ฉ”์ธ UI์— ์ ‘๊ทผํ•  ๋ฐฉ๋ฒ•์ด ์—†๋Š” ๊ฒƒ์ผ๊นŒ์š”?

MFC์—์„œ๋Š” ์ž‘์—…์ž ์Šค๋ ˆ๋“œ์—์„œ PostMessage / SendMessage๋ฅผ ํ†ตํ•ด UI ์Šค๋ ˆ๋“œ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
[MFC] SendMessage์™€ PostMessage์˜ ์ฐจ์ด (์˜ˆ์ œ ์ฝ”๋“œ ํฌํ•จ)

C#์—์„œ๋Š” ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ(Delegate)๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณผ๊นŒ์š”?

์ž‘์—…์ž ์Šค๋ ˆ๋“œ(Worker Thread)

ํŠน์ • ์—ฐ์‚ฐ์ด๋‚˜ ์ž‘์—…์„ ์œ„ํ•œ ์Šค๋ ˆ๋“œ๋ฅผ ์ผ์ปซ๋Š”๋‹ค.
์ง์ ‘ UI ์ปจํŠธ๋กค์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
UI ์Šค๋ ˆ๋“œ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด PostMessage ๋˜๋Š” SendMessage๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์Šค๋ ˆ๋“œ(User-Interface Thread)

ํ™”๋ฉด ๊ฐฑ์‹ ์ด๋‚˜ ๊ทธ๋ ค์ง€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ '๋ณด์ด๋Š” ์ž‘์—…'์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
์ปจํŠธ๋กค์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค.
๋ฐ˜์‘ํ˜•