$lang['tuto'] = "பயிற்சிகள்"; ?>$lang['tuto'] = "பயிற்சிகள்"; ?> பணி நிர்வாகியில்

பணி நிர்வாகியில் தொடர்ச்சியான சி ++ வின் 32 பயன்பாட்டு செயல்முறைகளைத் தீர்ப்பது

பணி நிர்வாகியில் தொடர்ச்சியான சி ++ வின் 32 பயன்பாட்டு செயல்முறைகளைத் தீர்ப்பது
பணி நிர்வாகியில் தொடர்ச்சியான சி ++ வின் 32 பயன்பாட்டு செயல்முறைகளைத் தீர்ப்பது

WIN32 பயன்பாட்டை பிழைத்திருத்துகிறது, அது சரியாக வெளியேறாது

ஓபன்ஜிஎல் உடன் ஒரு எளிய வின் 32 விண்ணப்பத்தை எழுதுவதை நீங்கள் முடித்துவிட்டீர்கள், ஆனால் எரிச்சலூட்டும் பிரச்சினை உள்ளது - நீங்கள் சாளரத்தை மூடுகிறீர்கள், ஆனால் செயல்முறை பிடிவாதமாக பணி மேலாளரில் செயலில் உள்ளது. *நீங்கள் x பொத்தானைக் கிளிக் செய்தாலும் அல்லது alt+f4 ஐ அழுத்தினால், நிரல் முழுமையாக நிறுத்தப்படாது.

இந்த நடத்தை வெறுப்பாக இல்லை; உங்கள் பயன்பாட்டின் பல நிகழ்வுகள் குவிந்தால் இது நினைவக கசிவுகள் மற்றும் செயல்திறன் சிக்கல்களையும் ஏற்படுத்தும். அத்தகைய சிக்கலை பிழைத்திருத்துவதற்கு சாளர நிகழ்வு கையாளுதல், செய்தி சுழல்கள் மற்றும் வள துப்புரவு இல் ஆழமான டைவ் தேவைப்படுகிறது. நீங்கள் இதை எதிர்கொண்டால், நீங்கள் தனியாக இல்லை! பல சி ++ டெவலப்பர்கள் விண்டோஸ் ஏபிஐ மற்றும் ஓபன்ஜிஎல் சூழல்களுடன் உடன் பணிபுரியும் போது இதில் ஓடுகிறார்கள்.

நல்ல செய்தி? தீர்வுகள் உள்ளன . Wm_close , WM_Destroy , மற்றும் PostQuitMessage (0) சரியாக கையாளப்படுவதை உறுதிசெய்கிறது. இந்த படிகள் இருந்தபோதிலும் சிக்கல் தொடர்ந்தால், ஆழமான ஒன்று விளையாடுகிறது -ஒருவேளை நீடித்த நூல், ஒரு திட்டமிடப்படாத வளம் அல்லது கவனிக்கப்படாத அமைப்பு சார்பு. .

இந்த கட்டுரையில், இந்த சிக்கலின் மூல காரணங்களை பகுப்பாய்வு செய்வோம், பிழைத்திருத்த நுட்பங்களை ஆராய்வோம், நடைமுறை தீர்வுகளை வழங்குவோம். நீங்கள் ஓபன்ஜிஎல் அல்லது அனுபவமுள்ள சி ++ டெவலப்பருடன் பரிசோதனை செய்யும் ஒரு தொடக்க வீரராக இருந்தாலும், இந்த வழிகாட்டி உங்கள் பயன்பாடு ஐ முழுமையாகவும் சுத்தமாகவும் மூடிவிடுவதை உறுதிப்படுத்த உதவும் . .

கட்டளை பயன்பாட்டின் எடுத்துக்காட்டு
wglMakeCurrent குறிப்பிட்ட சாதன சூழலுக்கான OpenGL ரெண்டரிங் சூழலை அமைக்க பயன்படுகிறது. சரியாக அமைக்கப்படாவிட்டால், இது பின்னணியில் செயல்முறைகள் நீடிக்கும்.
wglDeleteContext OpenGL ரெண்டரிங் சூழலை நீக்குகிறது. இதை விடுவிக்காதது நினைவக கசிவுகளை ஏற்படுத்தும் மற்றும் பயன்பாடு முழுமையாக மூடப்படுவதைத் தடுக்கலாம்.
ReleaseDC ஒரு சாளரத்திற்கான சாதன சூழலை (டி.சி) வெளியிடுகிறது. இது சரியாக செய்யப்படாவிட்டால், வளங்கள் ஒதுக்கப்பட்டிருக்கலாம், இதனால் செயல்முறை முடிவடையும் சிக்கல்களை ஏற்படுத்தும்.
DestroyWindow ஒரு குறிப்பிட்ட சாளரத்திற்கு WM_DESTROY செய்தியை அனுப்புகிறது, இது கணினியிலிருந்து சரியாக அகற்றப்படுவதை உறுதிசெய்கிறது.
PostQuitMessage செய்தி வரிசையில் ஒரு WM_QUIT செய்தியை இடுகையிடுகிறது, பயன்பாடு சுத்தமாக நிறுத்தப்பட வேண்டும் என்று சமிக்ஞை செய்கிறது.
TerminateProcess அதன் கைப்பிடியைக் கொடுக்கும் ஒரு செயல்முறையை வலுக்கட்டாயமாக முடிக்கிறது. நீடித்த பயன்பாட்டை நிறுத்த இது ஒரு கடைசி-ரிசார்ட் முறையாகும்.
OpenProcess ஒரு செயல்முறைக்கு ஒரு கைப்பிடியைப் பெறுகிறது, பின்னர் தேவைப்பட்டால் அதை நிறுத்த பயன்படுத்தலாம்.
GetCurrentProcessId அழைப்பு செயல்முறையின் செயல்முறை ஐடியை மீட்டெடுக்கிறது, இது பிழைத்திருத்தத்திற்கும் பயன்பாட்டை கைமுறையாக நிறுத்துவதற்கும் பயனுள்ளதாக இருக்கும்.
InvalidateRect சாளரத்தின் ஒரு பகுதியை மறுவடிவமைக்க வேண்டியிருப்பதைக் குறிக்கிறது, ரெண்டரிங் போது காட்சி கலைப்பொருட்களைத் தடுக்கிறது.
SetTimer ஒரு டைமர் நிகழ்வை உருவாக்குகிறது, இது பெரும்பாலும் சுழற்சிகளில் பயன்படுத்தப்படுகிறது, ஆனால் கில்டிமருடன் சரியாக நிறுத்தப்படாவிட்டால், செயல்முறை முடிவடைவதில் சிக்கல்களை ஏற்படுத்தும்.

தொடர்ச்சியான WIN32 செயல்முறைகளைப் புரிந்துகொள்வது மற்றும் சரிசெய்தல்

Opengl உடன் Win32 பயன்பாடுகளை உருவாக்கும் போது மிகவும் வெறுப்பூட்டும் சிக்கல்களில் ஒன்று உங்கள் நிரல் இருப்பதைக் காண்கிறது பணி மேலாளர் சாளரத்தை மூடிய பிறகும். சாதன சூழல்கள் (HDC) அல்லது OpenGL ரெண்டரிங் சூழல்கள் (HGLRC) போன்ற கணினி வளங்கள் சரியாக வெளியிடப்படாதபோது இது பொதுவாக நிகழ்கிறது. முன்னர் வழங்கப்பட்ட ஸ்கிரிப்ட்களில், wm_close மற்றும் wm_destroy போன்ற சரியான சாளர செய்திகளைக் கையாள்வதன் மூலம் சுத்தமான பணிநிறுத்தத்தை உறுதி செய்வதில் முக்கிய கவனம் செலுத்தப்பட்டது. முதல் தீர்வு செய்தி வளையம் பயன்படுத்துவதன் மூலம் சரியாக முடிவடைவதை உறுதி செய்கிறது போஸ்ட்கிட்மெசேஜ் (0), இது பயன்பாட்டை நிறுத்த சாளரங்களை சமிக்ஞை செய்கிறது. இந்த செய்தி காணவில்லை என்றால், செயல்முறை பின்னணியில் தொடர்ந்து இயங்கக்கூடும்.

இரண்டாவது ஸ்கிரிப்ட் பொதுவான ஓபன்ஜிஎல் தொடர்பான சிக்கலைக் கையாண்டது: சாளரத்தை மூடுவதற்கு முன் ரெண்டரிங் சூழலை வெளியிடுவதில் தோல்வி. சாளரம் அழிக்கப்படும் போது ஓபன்ஜிஎல் சூழல் இன்னும் செயலில் இருந்தால், விண்டோஸ் செயல்முறையை உயிரோடு வைத்திருக்கலாம். அதனால்தான் ஸ்கிரிப்ட் wglmakecurrent (, ) ஐ wgldeleteletecontext () உடன் நீக்குவதற்கு முன் அதை செயலிழக்க . கூடுதலாக, சாளரத்துடன் தொடர்புடைய சாதன சூழலை விடுவிக்க வெளியிடப்பட்ட சி () பயன்படுத்தப்படுகிறது. நீடித்த வளங்கள் எதுவும் விடப்படவில்லை என்பதை இந்த படிகள் உறுதி செய்கின்றன. ஓபன்ஜிஎல் விளையாட்டில் வேலை செய்வதை கற்பனை செய்து பாருங்கள் , ஒவ்வொரு முறையும் நீங்கள் சாளரத்தை மூடும்போது, ​​அது பின்னணியில் இயங்குகிறது, CPU மற்றும் GPU வளங்களை உட்கொள்கிறது . இதுதான் நாங்கள் தீர்க்கும் பிரச்சினை. .

மூன்றாவது ஸ்கிரிப்ட் இந்த செயல்முறையை இன்னும் இருந்தால் கைமுறையாக நிறுத்துவதன் மூலம் மிகவும் ஆக்ரோஷமான அணுகுமுறையை எடுக்கிறது. நிலையான தூய்மைப்படுத்தும் முறைகள் தோல்வியுற்ற காட்சிகளை பிழைத்திருத்துவதற்கு இது பயனுள்ளதாக இருக்கும். OpenProcess () ஐப் பயன்படுத்தி, ஸ்கிரிப்ட் இயங்கும் செயல்முறைக்கு ஒரு கைப்பிடியைப் பெற்று, அதை வலுக்கட்டாயமாக முடிவுக்கு கொண்டுவர நிறுத்தப் பதவி () அழைப்புகள். இது பொதுவாக சாதாரண பயன்பாடுகளுக்கு சிறந்த நடைமுறை அல்ல என்றாலும், இது சரிசெய்தலுக்கான ஆயுட்காலம். எடுத்துக்காட்டாக, நீங்கள் கிராபிக்ஸ்-தீவிர பயன்பாடு இல் பணிபுரிகிறீர்கள் என்றால், பயன்பாட்டை மூடிய பின்னரும் சில செயல்முறைகள் பின்னணியில் இயங்குவதை நீங்கள் கவனிக்கலாம், இது தேவையற்ற ரேம் மற்றும் ஜி.பீ.யூ நினைவக நுகர்வுக்கு வழிவகுக்கிறது . seminateProcess () ஐப் பயன்படுத்துவது இதுபோன்ற சந்தர்ப்பங்களில் மூல காரணத்தை பிழைத்திருத்தும்போது தற்காலிக தீர்வாக இருக்கலாம். .

இறுதியாக, கட்டளைகளின் அட்டவணை எடுத்துக்காட்டுகிறது குறிப்பிட்ட வின் 32 செயல்பாடுகள் அவை பொதுவாக விவாதிக்கப்படவில்லை, ஆனால் நிர்வகிப்பதில் முக்கிய பங்கு வகிக்கின்றன செயல்முறை தூய்மைப்படுத்தல் மற்றும் வள ஒப்பந்தக்கலை . செட்டிமர் () மற்றும் கில்டிமர் () போன்ற செயல்பாடுகளைப் புரிந்துகொள்வதன் மூலம், சாளரம் மூடப்பட்ட பின்னரும் கூட டைமர்கள் தொடர்ந்து இயங்குவது போன்ற பொதுவான ஆபத்துக்களை டெவலப்பர்கள் தவிர்க்கலாம். WIN32 பயன்பாடுகள் பிழைத்திருத்தமாக உணர முடியும், ஆனால் சரியான செய்தி கையாளுதல், வள சுத்தம் மற்றும் செயல்முறை மேலாண்மை ஆகியவற்றில் கவனம் செலுத்துவதன் மூலம், உங்கள் பயன்பாடு TASKASS AMANAGER*இல் தடயங்களை விடாமல் சீராகவும் திறமையாகவும் வெளியேறுவதை உறுதிசெய்யலாம் *. .

WIN32 C ++ பயன்பாடுகளில் தொடர்ச்சியான செயல்முறைகளைக் கையாளுதல்

விண்டோஸ் சூழலில் சரியான செய்தி கையாளுதலைப் பயன்படுத்தி உகந்த தீர்வு

#include <Windows.h>
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch (msg) {
        case WM_CLOSE:
            DestroyWindow(hwnd);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

ஓபன்ஜிஎல் சூழல்களில் சரியான தூய்மைப்படுத்தலை உறுதி செய்தல்

நீடித்த செயல்முறைகளைத் தடுக்க சரியான சூழல் வெளியீட்டைக் கொண்ட ஓபன்ஜிஎல் தூய்மைப்படுத்துதல்

#include <Windows.h>
#include <gl/GL.h>
HGLRC hRC;
HDC hDC;
void CleanupOpenGL(HWND hwnd) {
    wglMakeCurrent(hDC, );
    wglDeleteContext(hRC);
    ReleaseDC(hwnd, hDC);
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch (msg) {
        case WM_CLOSE:
            CleanupOpenGL(hwnd);
            DestroyWindow(hwnd);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

பணி மேலாளர் காசோலையுடன் நீடித்த செயல்முறைகளை பிழைத்திருத்துதல்

செயல்முறை முடித்தல் சரிபார்க்க விண்டோஸ் ஏபிஐ பயன்படுத்துதல் மற்றும் தேவைப்பட்டால் வெளியேறுதல்

#include <Windows.h>
#include <tlhelp32.h>
void TerminateProcessIfExists(DWORD pid) {
    HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
    if (hProcess) {
        TerminateProcess(hProcess, 0);
        CloseHandle(hProcess);
    }
}
int main() {
    DWORD pid = GetCurrentProcessId();
    TerminateProcessIfExists(pid);
    return 0;
}

WIN32 பயன்பாடுகளில் நினைவக கசிவுகளைத் தடுக்கிறது

ஒரு போது Win32 விண்ணப்பம் சரியாக நிறுத்தப்படாது, இது சாளரத்தை மூடுவதில் ஒரு பிரச்சினையாக இருக்காது; இது நினைவக கசிவுகள் மற்றும் தடையற்ற வளங்கள் உடன் தொடர்புடையதாக இருக்கலாம். விண்டோஸ் ஏபிஐ அடிப்படையிலான பயன்பாட்டில் உருவாக்கப்பட்ட ஒவ்வொரு சாளரமும் கணினி வளங்களை சாதன சூழல்கள் (டிசி), கிராபிக்ஸ் சூழல்கள் மற்றும் கையாளுதல்கள் போன்ற கணினி வளங்களை ஒதுக்குகிறது, இது நிரல் வெளியேறுவதற்கு முன்பு வெளியிடப்பட வேண்டும். இவை சரியாக சுத்தம் செய்யப்படாவிட்டால், இயக்க முறைமை செயல்முறையை பின்னணியில் இயக்கலாம்.

அத்தகைய பயன்பாடுகளில் கவனிக்கப்படாத ஒரு அம்சம் நூல்களின் சரியான மேலாண்மை . சில வின் 32 பயன்பாடுகள் பிரதான சாளரம் மூடப்பட்ட பின்னரும் தொடர்ந்து இயங்குகின்றன. நிரல் மல்டித்ரெட் செய்யப்பட்டால், அழைப்பதற்கு முன்பு அனைத்து தொழிலாளி நூல்களும் சரியாக நிறுத்தப்படுவதை உறுதிசெய்க போஸ்ட்கிட்மெசேஜ் (0) முக்கியமானது. ஒரு பொதுவான தவறு என்னவென்றால், சேர அல்லது தொழிலாளி நூல்களை சமிக்ஞை செய்வதை மறந்துவிடுவது நிறுத்தப்படுவது, இது ஒரு நீடித்த செயல்முறைக்கு வழிவகுக்கிறது. டெவலப்பர்கள் பெரும்பாலும் பணிபுரியும் போது இந்த சிக்கலை எதிர்கொள்கின்றனர் சுழல்கள் வழங்குதல் ஓபன்ஜிஎல்லில், சாளரம் மூடப்பட்ட பின்னரும் பின்னணி கணக்கீடுகள் நீடிக்கக்கூடும். .

மற்றொரு முக்கிய காரணி வெளிப்புற நூலகங்கள் பயன்பாட்டு பணிநிறுத்தம் செயல்முறையுடன் எவ்வாறு தொடர்பு கொள்கின்றன. சில நூலகங்கள், குறிப்பாக கிராபிக்ஸ் தொடர்பான ஓபன்எங்எல் அல்லது டைரக்ட்எக்ஸ் போன்றவை, வெளிப்படையான தூய்மைப்படுத்தல் தேவைப்படும் உள் நிலைகளை பராமரிக்கின்றன. ஒரு பயன்பாடு wglmakecurrent () ஐப் பயன்படுத்தினால், ஆனால் ரெண்டரிங் சூழலை சரியாக செயலிழக்கச் செய்யாவிட்டால், செயல்முறை செயலில் இருக்கக்கூடும். இதைத் தடுக்க, ஓபன்ஜிஎல் சூழலை நீக்குவதற்கு முன் wglmakecurrent (, ) ஐ அழைப்பது செயல்முறை சரியாக வெளியிடப்படுவதை உறுதி செய்கிறது. சரியான நினைவக ஒப்பந்த இடம், நூல் மேலாண்மை மற்றும் வெளிப்புற நூலக தூய்மைப்படுத்தல் ஆகியவற்றில் கவனம் செலுத்துவதன் மூலம், டெவலப்பர்கள் தங்கள் வின் 32 பயன்பாடுகள் பணி மேலாளரில் நீடிப்பாமல் சுத்தமாக வெளியேறுவதை உறுதிப்படுத்த முடியும் . .

தொடர்ச்சியான வின் 32 செயல்முறைகளுக்கான பொதுவான சிக்கல்கள் மற்றும் தீர்வுகள்

  1. எனது WIN32 பயன்பாடு மூடப்பட்ட பிறகும் பணி மேலாளரிடம் ஏன் இருக்கும்?
  2. சாளரம் கையாளுகிறது , ஓபன்ஜிஎல் சூழல்கள் , அல்லது நூல்கள் சரியாக வெளியிடப்படாவிட்டால் இது நிகழலாம். எப்போதும் Destroywindow () , wglDeleteContext(), மற்றும் PostQuitMessage(0) சரியாக பயன்படுத்தப்படுகின்றன.
  3. எனது பயன்பாட்டில் இன்னும் நூல்கள் இயங்குகின்றனவா என்பதை நான் எவ்வாறு சரிபார்க்கிறேன்?
  4. நீங்கள் விண்டோஸ் பணி மேலாளர் அல்லது அழைக்கலாம் GetProcessId() உங்கள் பயன்பாட்டிற்குள் செயலில் உள்ள நூல்கள் மற்றும் செயல்முறைகளை ஆய்வு செய்ய.
  5. நான் பயன்படுத்தினால் என்ன ஆகும் ExitProcess(0) எனது விண்ணப்பத்தை மூட கட்டாயப்படுத்தவா?
  6. exitProcess (0) ஐப் பயன்படுத்துதல் செயல்முறையை பலமாக மூடுகிறது, ஆனால் இது நினைவகம் அல்லது கோப்பு கைப்பிடிகள் போன்ற வளங்களை முறையாக சுத்தம் செய்ய அனுமதிக்காது. இது ஒரு கடைசி ரிசார்ட் தீர்வாக மட்டுமே இருக்க வேண்டும்.
  7. செய்கிறது TerminateProcess() விட சிறப்பாக வேலை செய்யுங்கள் PostQuitMessage(0)?
  8. இல்லை, பணிநீக்கம் () மிகவும் ஆக்ரோஷமானது மற்றும் வள கசிவுகளை ஏற்படுத்தும். PostQuitMessage (0) சுத்தமான பணிநிறுத்தத்தை உறுதி செய்வதற்கான விருப்பமான வழியாகும்.
  9. எனது பயன்பாடு ஏன் இன்னும் இயங்குகிறது என்பதை நான் எவ்வாறு பிழைத்திருத்த முடியும்?
  10. மீதமுள்ள கைப்பிடிகள் மற்றும் பிழைத்திருத்த கருவிகளை ஆய்வு செய்ய செயல்முறை எக்ஸ்ப்ளோரர் ஐப் பயன்படுத்தவும், பயன்பாட்டின் எந்த பகுதி மூடப்படுவதைத் தடுக்கிறது என்பதைக் கண்காணிக்க.

WIN32 விண்ணப்பத்தை சரியாக மூடுகிறது

Win32 பயன்பாட்டிற்கான சுத்தமான வெளியேற்றத்தை உறுதி செய்வது நினைவக கசிவுகளைத் தடுப்பதற்கும் பணி மேலாளர் இல் நீடித்த செயல்முறைகளைத் தவிர்ப்பதற்கும் அவசியம். இந்த கட்டுரையின் முக்கிய பயணங்களில் WM_Close மற்றும் WM_Destroy , Opengl சூழல்களை சரியாக வெளியிடுகிறது , மற்றும் இயங்கும் அனைத்து நூல்களும் வெளியேறுவதற்கு முன்பு நிறுத்தப்பட்டுள்ளன என்பதை சரிபார்க்கிறது. .

இத்தகைய சிக்கல்களை பிழைத்திருத்துவதற்கு செயலில் உள்ள வளங்கள் மற்றும் நீடித்த கைப்பிடிகளைக் கண்காணிக்க செயல்முறை எக்ஸ்ப்ளோரர் போன்ற கருவிகளைப் பயன்படுத்த வேண்டும். நீங்கள் ஒரு எளிய OpenGL சாளரம் அல்லது ஒரு சிக்கலான வரைகலை பயன்பாடு ஐ உருவாக்கினாலும், மாஸ்டரிங் வள துப்புரவு இந்த வெறுப்பூட்டும் ஆபத்துக்களைத் தவிர்க்கவும், உங்கள் நிரல்கள் சீராக நிறுத்தப்படுவதை உறுதிசெய்யவும் உதவும். .

நம்பகமான குறிப்புகள் மற்றும் பயனுள்ள வளங்கள்
  1. அதிகாரப்பூர்வ மைக்ரோசாஃப்ட் ஆவணங்கள் Win32 API மற்றும் சாளர மேலாண்மை: மைக்ரோசாஃப்ட் வின் 32 ஏபிஐ
  2. Opengl சூழல் மேலாண்மை மற்றும் சிறந்த நடைமுறைகள்: க்ரோனோஸ் ஓபன்ஜிஎல் ஆவணங்கள்
  3. விண்டோஸ் பயன்பாடுகளில் நீடித்த செயல்முறைகளை பிழைத்திருத்துதல்: மைக்ரோசாஃப்ட் செயல்முறை எக்ஸ்ப்ளோரர்
  4. தீர்க்கப்படாத வின் 32 செயல்முறைகள் குறித்த ஸ்டேக் வழிதல் விவாதம்: அடுக்கு வழிதல்
  5. விண்டோஸ் ஏபிஐ செயல்பாடு குறிப்புகள் போஸ்ட்கிட்மெசேஜ் () மற்றும் அழிந்து: விண்டோஸ் பயனர் ஏபிஐ