Message loop in Microsoft Windows
સંદેશ લૂપ એ દરેક પ્રોગ્રામમાં કોડનો ફરજિયાત વિભાગ છે જે માઈક્રોસોફ્ટ વિન્ડોઝ હેઠળ ગ્રાફિકલ વપરાશકર્તા ઇન્ટરફેસનો ઉપયોગ કરે છે. GUI ધરાવતા વિન્ડોઝ પ્રોગ્રામ્સ ઇવેન્ટ સંચાલિત હોય છે. વિન્ડોઝ દરેક થ્રેડ માટે વ્યક્તિગત સંદેશ કતાર જાળવે છે જેણે વિન્ડો બનાવી છે. સામાન્ય રીતે માત્ર પ્રથમ થ્રેડ જ બારીઓ બનાવે છે. જ્યારે પણ તે થ્રેડની વિંડો પર માઉસ પ્રવૃત્તિ થાય છે, જ્યારે પણ કીબોર્ડ પ્રવૃત્તિ થાય છે જ્યારે તે વિંડોમાં ફોકસ હોય છે, અને અન્ય સમયે વિન્ડોઝ તે કતારમાં સંદેશા મૂકે છે. પ્રક્રિયા તેની પોતાની કતારમાં સંદેશાઓ પણ ઉમેરી શકે છે. વપરાશકર્તા ઇનપુટ સ્વીકારવા માટે, અને અન્ય કારણોસર, વિંડો સાથેના દરેક થ્રેડે સતત તેની કતારમાંથી સંદેશાઓ પુનઃપ્રાપ્ત કરવા જોઈએ, અને તેમના પર કાર્ય કરવું જોઈએ. પ્રોગ્રામર એક લૂપ લખીને પ્રક્રિયા કરે છે જે ગેટમેસેજ (જે સંદેશ માટે અવરોધે છે અને તેને પુનઃપ્રાપ્ત કરે છે) ને કૉલ કરે છે, અને પછી ડિસ્પેચમેસેજ (જે સંદેશ મોકલે છે) ને કૉલ કરે છે, અને અનિશ્ચિત સમય માટે પુનરાવર્તન કરે છે. આ સંદેશ લૂપ છે. સામાન્ય રીતે મુખ્ય પ્રોગ્રામમાં એક સંદેશ લૂપ હોય છે, જે મુખ્ય થ્રેડ પર ચાલે છે, અને દરેક બનાવેલા મોડલ સંવાદમાં વધારાના સંદેશ લૂપ હોય છે. પ્રક્રિયાની દરેક વિંડો માટેના સંદેશાઓ તેની સંદેશ કતારમાંથી પસાર થાય છે, અને તેના સંદેશ લૂપ દ્વારા નિયંત્રિત થાય છે. મેસેજ લૂપ એ એક પ્રકારની ઇવેન્ટ લૂપ છે. મૂળભૂત સંદેશ લૂપ નીચે પ્રમાણે દેખાય છેઃ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, 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 હોય, તો સંદેશ લૂપ બહાર નીકળવો જોઈએ. {બ્રેક;}} રીટર્ન msg.wParam;} ઇવેન્ટ લૂપ માટે દરેક સંદેશ પર ટ્રાન્સલેટમેસેજ કૉલ કરવો પરંપરાગત છે જે વર્ચ્યુઅલ કીસ્ટ્રોકને શબ્દમાળાઓમાં અનુવાદિત કરી શકે છે. અનુવાદ સંદેશ કૉલ કરવો તકનીકી રીતે જરૂરી નથી, પરંતુ જો તેને કૉલ કરવામાં ન આવે તો સમસ્યાઓ પરિણમી શકે છે. સંદેશ લૂપને ડિસ્પેચમેસેજ પર કૉલ કરવો આવશ્યક છે. સંદેશ લૂપ તે જે સંદેશાઓને સંભાળે છે તેના પર સીધું કાર્ય કરતું નથી. તે તેમને ડિસ્પેચમેસેજ પર કૉલ કરીને મોકલે છે, જે સંદેશને જે વિંડોમાં સંબોધવામાં આવ્યો હતો તેના માટે "વિંડો પ્રોસિજર" પર સંદેશને સ્થાનાંતરિત કરે છે. ("વિન્ડો પ્રક્રિયા" એ કોલબેક પ્રક્રિયા છે, જે વિન્ડો વર્ગની નોંધણી વખતે તેની સાથે સંકળાયેલી હતી.) (એક કરતાં વધુ વિન્ડો સમાન વિન્ડો પ્રક્રિયાનો ઉપયોગ કરી શકે છે.) કોડ વિન્ડો પ્રક્રિયામાં સીધા સંદેશા પણ મોકલી શકે છે. આને નોનક્યુડ સંદેશાઓ કહેવામાં આવે છે. કડક સંદેશ લૂપ એકમાત્ર વિકલ્પ નથી. પ્રોગ્રામમાં અન્યત્ર કોડ પણ સંદેશાઓ સ્વીકારી અને મોકલી શકે છે. પીકમેસેજ એ બિન-અવરોધિત કોલ છે જે તરત જ પાછો આવે છે, જો કોઈ રાહ જોઈ રહ્યું હોય તો સંદેશ સાથે, અથવા જો કોઈ રાહ જોઈ રહ્યું ન હોય તો કોઈ સંદેશ નહીં. જ્યાં સુધી સંદેશ કતારમાં ન હોય ત્યાં સુધી રાહ જુઓ સંદેશ થ્રેડને ઊંઘવાની મંજૂરી આપે છે. આધુનિક ગ્રાફિકલ ઇન્ટરફેસ માળખાઓ, જેમ કે વિન્ડોઝ ફોર્મ્સ, વિન્ડોઝ પ્રેઝન્ટેશન ફાઉન્ડેશન, એમએફસી, ડેલ્ફી, ક્યૂટી અને અન્યને વિન્ડોઝ મેસેજ લૂપને કોડ કરવા માટે એપ્લિકેશનોની જરૂર નથી, કારણ કે તેઓ માળખામાં વ્યાખ્યાયિત કરેલા કી પ્રેસ અને માઉસ ક્લિક જેવી ઇવેન્ટ્સને તેમના યોગ્ય હેન્ડલર્સ પર આપમેળે રૂટ કરે છે. જો કે, દરેક માળખું ક્યાંક સંદેશ લૂપનો અમલ કરે છે, અને જ્યારે વધુ સીધા નિયંત્રણની જરૂર હોય ત્યારે સંદેશ લૂપને સામાન્ય રીતે ઍક્સેસ કરી શકાય છે અથવા બદલી શકાય છે. એક્સ વિન્ડો સિસ્ટમમાં ઇવેન્ટ લૂપ માટે એક્સલિબ પણ જુઓ બાહ્ય કડીઓ મીન્ડરિંગ થ્રુ ધ મેઝ ઓફ એમએફસી મેસેજ એન્ડ કમાન્ડ રાઉટીંગ (એમએસજે, જુલાઈ 1995) એ કીઝ ઓડિસીઃ વીસીએલ પ્લેટફોર્મ એસડીકે દ્વારા કીસ્ટ્રોક સંદેશનો માર્ગઃ સંદેશાઓ અને સંદેશ કતારો પ્લેટફોર્મ એસડીકેઃ વિન્ડોઝ એપીઆઈઃ સંદેશાઓ અને સંદેશ કતારોનો ઉપયોગ કરીને સંદેશ લૂપ દાખલ કરવું (એમએસડીએન) ગેટમેસેજ ફંક્શન પીકમેસેજ ફંક્શન ઇવેન્ટ્સ (કમ્પ્યુટિંગ) માઇક્રોસોફ્ટ એપ્લિકેશન પ્રોગ્રામિંગ ઇન્ટરફેસો