Message loop in Microsoft Windows
ಮೈಕ್ರೋಸಾಫ್ಟ್ ವಿಂಡೋಸ್ ಅಡಿಯಲ್ಲಿ ಚಿತ್ರಾತ್ಮಕ ಬಳಕೆದಾರ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಬಳಸುವ ಪ್ರತಿ ಪ್ರೋಗ್ರಾಂನಲ್ಲಿ ಸಂದೇಶ ಲೂಪ್ ಕೋಡ್ನ ಕಡ್ಡಾಯ ವಿಭಾಗವಾಗಿದೆ. ಜಿಯುಐ ಹೊಂದಿರುವ ವಿಂಡೋಸ್ ಪ್ರೋಗ್ರಾಂಗಳು ಈವೆಂಟ್-ಚಾಲಿತವಾಗಿವೆ. ವಿಂಡೋಸ್ ಒಂದು ವಿಂಡೋವನ್ನು ರಚಿಸಿದ ಪ್ರತಿ ಥ್ರೆಡ್ಗೆ ಪ್ರತ್ಯೇಕ ಸಂದೇಶದ ಕ್ಯೂ ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಸಾಮಾನ್ಯವಾಗಿ ಮೊದಲ ಥ್ರೆಡ್ ಮಾತ್ರ ಕಿಟಕಿಗಳನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ. ಆ ಥ್ರೆಡ್ನ ವಿಂಡೋದಲ್ಲಿ ಮೌಸ್ ಚಟುವಟಿಕೆ ಸಂಭವಿಸಿದಾಗಲೆಲ್ಲಾ, ಆ ವಿಂಡೋ ಫೋಕಸ್ ಹೊಂದಿರುವಾಗ ಕೀಬೋರ್ಡ್ ಚಟುವಟಿಕೆ ಸಂಭವಿಸಿದಾಗಲೆಲ್ಲಾ ಮತ್ತು ಇತರ ಸಮಯಗಳಲ್ಲಿ ವಿಂಡೋಸ್ ಸಂದೇಶಗಳನ್ನು ಆ ಸರತಿಯಲ್ಲಿ ಇರಿಸುತ್ತದೆ. ಒಂದು ಪ್ರಕ್ರಿಯೆಯು ತನ್ನದೇ ಆದ ಸರಣಿಗೆ ಸಂದೇಶಗಳನ್ನು ಕೂಡ ಸೇರಿಸಬಹುದು. ಬಳಕೆದಾರರ ಇನ್ಪುಟ್ ಅನ್ನು ಸ್ವೀಕರಿಸಲು, ಮತ್ತು ಇತರ ಕಾರಣಗಳಿಗಾಗಿ, ವಿಂಡೋದೊಂದಿಗಿನ ಪ್ರತಿ ಥ್ರೆಡ್ ನಿರಂತರವಾಗಿ ಅದರ ಸಾಲಿನಿಂದ ಸಂದೇಶಗಳನ್ನು ಹಿಂಪಡೆಯಬೇಕು ಮತ್ತು ಅವುಗಳ ಮೇಲೆ ಕಾರ್ಯನಿರ್ವಹಿಸಬೇಕು. ಒಬ್ಬ ಪ್ರೋಗ್ರಾಮರ್ ಗೆಟ್ಮೆಸೇಜ್ಗೆ ಕರೆ ಮಾಡುವ ಲೂಪ್ ಅನ್ನು ಬರೆಯುವ ಮೂಲಕ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಮಾಡುತ್ತಾರೆ (ಇದು ಸಂದೇಶವನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ ಮತ್ತು ಅದನ್ನು ಹಿಂಪಡೆಯುತ್ತದೆ), ಮತ್ತು ನಂತರ ಡಿಸ್ಪ್ಯಾಚ್ಮೆಸೇಜ್ಗೆ ಕರೆ ಮಾಡುತ್ತಾರೆ (ಇದು ಸಂದೇಶವನ್ನು ಕಳುಹಿಸುತ್ತದೆ), ಮತ್ತು ಅನಿರ್ದಿಷ್ಟವಾಗಿ ಪುನರಾವರ್ತಿಸುತ್ತದೆ. ಇದು ಸಂದೇಶದ ಲೂಪ್ ಆಗಿದೆ. ಸಾಮಾನ್ಯವಾಗಿ ಮುಖ್ಯ ಪ್ರೋಗ್ರಾಂನಲ್ಲಿ ಸಂದೇಶ ಲೂಪ್ ಇರುತ್ತದೆ, ಇದು ಮುಖ್ಯ ಥ್ರೆಡ್ನಲ್ಲಿ ಚಲಿಸುತ್ತದೆ ಮತ್ತು ಪ್ರತಿ ರಚಿಸಿದ ಮಾದರಿ ಸಂವಾದದಲ್ಲಿ ಹೆಚ್ಚುವರಿ ಸಂದೇಶ ಲೂಪ್ ಇರುತ್ತದೆ. ಪ್ರಕ್ರಿಯೆಯ ಪ್ರತಿಯೊಂದು ಕಿಟಕಿಯ ಸಂದೇಶಗಳು ಅದರ ಸಂದೇಶ ಸರಣಿಯ ಮೂಲಕ ಹಾದುಹೋಗುತ್ತವೆ ಮತ್ತು ಅದರ ಸಂದೇಶ ಲೂಪ್ನಿಂದ ನಿರ್ವಹಿಸಲ್ಪಡುತ್ತವೆ. ಸಂದೇಶದ ಲೂಪ್ ಒಂದು ರೀತಿಯ ಈವೆಂಟ್ ಲೂಪ್ ಆಗಿದೆ. ಒಂದು ಮೂಲ ಸಂದೇಶದ ಲೂಪ್ ಈ ಕೆಳಗಿನಂತೆ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆಃ int WINAPI ವಿನ್ ಮೈನ್ (ಇನ್ಸ್ಟಾನ್ಸ್ ಇನ್ಸ್ಟಾನ್ಸ್, ಇನ್ಸ್ಟಾನ್ಸ್ hPrevಇನ್ಸ್ಟಾನ್ಸ್, LPSTR lpCmdLine, int nCmdShow) {MSG msg; BOOL bRet; ಆದರೆ (1) {bRet = GetMessage (& msg, null, 0,0); (bRet = =-1)// bRet-1 ಆಗಿದ್ದರೆ, GetMessage ವಿಫಲವಾಗಿದೆ. {// ದೋಷವನ್ನು ನಿಭಾಯಿಸಿ ಅಥವಾ ಲಾಗ್ ಮಾಡಿ; ಬಹುಶಃ ನಿರ್ಗಮಿಸಿ. //.} ಇಲ್ಲದಿದ್ದರೆ (bRet! = 0)// bRet 0 ಅಥವಾ-1 ಅಲ್ಲದಿದ್ದರೆ, ಸಂದೇಶವನ್ನು ಸಂಸ್ಕರಿಸಬೇಕು. {ಟ್ರಾನ್ಸ್ಲೇಟ್ಮೆಸೆಜ್ (& ಎಂ. ಎಸ್. ಜಿ); ಡಿಸ್ಪಾಚ್ಮೆಸೆಜ್ (& ಎಂ. ಎಸ್. ಜಿ);} ಇಲ್ಲದಿದ್ದರೆ// bRet 0 ಆಗಿದ್ದರೆ, ಸಂದೇಶದ ಲೂಪ್ ನಿರ್ಗಮಿಸಬೇಕು. ವರ್ಚುವಲ್ ಕೀಸ್ಟ್ರೋಕ್ಗಳನ್ನು ತಂತಿಗಳಾಗಿ ಭಾಷಾಂತರಿಸಬಹುದಾದ ಪ್ರತಿ ಸಂದೇಶದ ಮೇಲೆ ಈವೆಂಟ್ ಲೂಪ್ ಟ್ರಾನ್ಸ್ಲೇಟ್ಮೆಸೇಜ್ಗೆ ಕರೆ ಮಾಡುವುದು ಸಾಮಾನ್ಯವಾಗಿದೆ. ಅನುವಾದ ಸಂದೇಶಕ್ಕೆ ಕರೆ ಮಾಡುವುದು ತಾಂತ್ರಿಕವಾಗಿ ಅಗತ್ಯವಿಲ್ಲ, ಆದರೆ ಅದನ್ನು ಕರೆ ಮಾಡದಿದ್ದರೆ ಸಮಸ್ಯೆಗಳು ಉಂಟಾಗಬಹುದು. ಸಂದೇಶದ ಲೂಪ್ ಡಿಸ್ಪಾಚ್ಮೆಸೇಜ್ಗೆ ಕರೆ ಮಾಡಬೇಕು. ಸಂದೇಶ ಲೂಪ್ ಅದು ನಿರ್ವಹಿಸುವ ಸಂದೇಶಗಳ ಮೇಲೆ ನೇರವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ. ಇದು ಡಿಸ್ಪ್ಯಾಚ್ಮೆಸೇಜ್ಗೆ ಕರೆ ಮಾಡುವ ಮೂಲಕ ಅವರನ್ನು ಕಳುಹಿಸುತ್ತದೆ, ಇದು ಸಂದೇಶವನ್ನು ಉದ್ದೇಶಿಸಿರುವ ವಿಂಡೋದ "ವಿಂಡೋ ಪ್ರೊಸೀಜರ್" ಗೆ ಸಂದೇಶವನ್ನು ವರ್ಗಾಯಿಸುತ್ತದೆ. ("ವಿಂಡೋ ಪ್ರೊಸೀಜರ್" ಒಂದು ಕಾಲ್ಬ್ಯಾಕ್ ವಿಧಾನವಾಗಿದೆ, ಇದು ವಿಂಡೋ ಕ್ಲಾಸ್ ಅನ್ನು ನೋಂದಾಯಿಸಿದಾಗ ಅದಕ್ಕೆ ಸಂಬಂಧಿಸಿದೆ.) (ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚು ವಿಂಡೋಗಳು ಒಂದೇ ವಿಂಡೋ ಕಾರ್ಯವಿಧಾನವನ್ನು ಬಳಸಬಹುದು.) ಕೋಡ್ ಸಂದೇಶಗಳನ್ನು ನೇರವಾಗಿ ವಿಂಡೋ ಕಾರ್ಯವಿಧಾನಕ್ಕೆ ಕಳುಹಿಸಬಹುದು. ಇವುಗಳನ್ನು ನಾನ್ಕ್ಯೂಯ್ಡ್ ಸಂದೇಶಗಳು ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ. ಕಟ್ಟುನಿಟ್ಟಾದ ಸಂದೇಶ ಲೂಪ್ ಮಾತ್ರ ಆಯ್ಕೆಯಾಗಿಲ್ಲ. ಪ್ರೋಗ್ರಾಂನಲ್ಲಿ ಬೇರೆಡೆ ಕೋಡ್ ಸಂದೇಶಗಳನ್ನು ಸ್ವೀಕರಿಸಬಹುದು ಮತ್ತು ಕಳುಹಿಸಬಹುದು. ಪೀಕ್ಮೆಸೇಜ್ ಒಂದು ನಿರ್ಬಂಧಿಸದ ಕರೆಯಾಗಿದ್ದು ಅದು ತಕ್ಷಣವೇ ಹಿಂತಿರುಗುತ್ತದೆ, ಯಾರಾದರೂ ಕಾಯುತ್ತಿದ್ದರೆ ಸಂದೇಶದೊಂದಿಗೆ, ಅಥವಾ ಯಾರೂ ಕಾಯದಿದ್ದರೆ ಯಾವುದೇ ಸಂದೇಶವಿಲ್ಲ. ಕಾಯುವ ಸಂದೇಶವು ಒಂದು ಸಂದೇಶವು ಸರತಿಯಲ್ಲಿರುವವರೆಗೆ ದಾರವನ್ನು ನಿದ್ರಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ವಿಂಡೋಸ್ ಫಾರ್ಮ್ಗಳು, ವಿಂಡೋಸ್ ಪ್ರೆಸೆಂಟೇಶನ್ ಫೌಂಡೇಶನ್, ಎಂಎಫ್ಸಿ, ಡೆಲ್ಫಿ, ಕ್ಯೂಟಿ ಮತ್ತು ಇತರ ಆಧುನಿಕ ಗ್ರಾಫಿಕಲ್ ಇಂಟರ್ಫೇಸ್ ಫ್ರೇಮ್ವರ್ಕ್ಗಳಿಗೆ ವಿಂಡೋಸ್ ಸಂದೇಶ ಲೂಪ್ ಅನ್ನು ಕೋಡ್ ಮಾಡಲು ಅಪ್ಲಿಕೇಶನ್ಗಳ ಅಗತ್ಯವಿಲ್ಲ, ಏಕೆಂದರೆ ಅವು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕೀ ಪ್ರೆಸ್ಗಳು ಮತ್ತು ಮೌಸ್ ಕ್ಲಿಕ್ಗಳಂತಹ ಈವೆಂಟ್ಗಳನ್ನು ಚೌಕಟ್ಟಿನೊಳಗೆ ವ್ಯಾಖ್ಯಾನಿಸಿದಂತೆ ಅವುಗಳ ಸೂಕ್ತ ಹ್ಯಾಂಡ್ಲರ್ಗಳಿಗೆ ರೂಟ್ ಮಾಡುತ್ತವೆ. ಆದಾಗ್ಯೂ, ಪ್ರತಿ ಚೌಕಟ್ಟು ಎಲ್ಲೋ ಒಂದು ಸಂದೇಶ ಲೂಪ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ, ಮತ್ತು ಹೆಚ್ಚಿನ ನೇರ ನಿಯಂತ್ರಣದ ಅಗತ್ಯವಿದ್ದಾಗ ಸಂದೇಶ ಲೂಪ್ ಅನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಪ್ರವೇಶಿಸಬಹುದು ಅಥವಾ ಬದಲಾಯಿಸಬಹುದು. ಎಕ್ಸ್ ವಿಂಡೋ ಸಿಸ್ಟಂನಲ್ಲಿ ಈವೆಂಟ್ ಲೂಪ್ಗಾಗಿ ಎಕ್ಸ್ ಲಿಬ್ ಅನ್ನು ಸಹ ನೋಡಿ ಬಾಹ್ಯ ಕೊಂಡಿಗಳು ಮೆಂಡರಿಂಗ್ ಥ್ರೂ ದಿ ಮೇಜ್ ಆಫ್ ಎಂಎಫ್ಸಿ ಮೆಸೇಜ್ ಅಂಡ್ ಕಮಾಂಡ್ ರೂಟಿಂಗ್ (ಎಂಎಸ್ಜೆ, ಜುಲೈ 1995) ಎ ಕೀಸ್ ಒಡಿಸ್ಸಿಃ ವಿಸಿಎಲ್ ಪ್ಲಾಟ್ಫಾರ್ಮ್ ಮೂಲಕ ಕೀಸ್ಟ್ರೋಕ್ ಸಂದೇಶದ ಮಾರ್ಗ ಎಸ್ಡಿಕೆಃ ಸಂದೇಶಗಳು ಮತ್ತು ಸಂದೇಶ ಸಾಲುಗಳು ಪ್ಲಾಟ್ಫಾರ್ಮ್ ಎಸ್ಡಿಕೆಃ ವಿಂಡೋಸ್ ಎಪಿಐಃ ಸಂದೇಶಗಳು ಮತ್ತು ಸಂದೇಶ ಸಾಲುಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಸಂದೇಶ ಲೂಪ್ ಅನ್ನು ನಮೂದಿಸುವುದು (ಎಂಎಸ್ಡಿಎನ್) ಗೆಟ್ಮೆಸೇಜ್ ಕಾರ್ಯ ಪೀಕ್ಮೆಸೇಜ್ ಕಾರ್ಯಗಳು (ಕಂಪ್ಯೂಟಿಂಗ್) ಮೈಕ್ರೋಸಾಫ್ಟ್ ಅಪ್ಲಿಕೇಶನ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಇಂಟರ್ಫೇಸ್ಗಳು