Win32 ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਡੀਬੱਗ ਕਰਨਾ ਜੋ ਸਹੀ ਤਰ੍ਹਾਂ ਬਾਹਰ ਨਹੀਂ ਆਵੇਗਾ
ਤੁਸੀਂ ਹੁਣੇ ਹੀ ਓਪਨਜੀਐਲ ਨਾਲ ਇੱਕ ਸਧਾਰਣ ਵਿਨ 32 ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਪੂਰਾ ਕਰਨਾ ਪੂਰਾ ਕਰ ਦਿੱਤਾ ਹੈ, ਪਰ ਇੱਕ ਤੰਗ ਕਰਨ ਵਾਲਾ ਮੁੱਦਾ - ਤੁਸੀਂ ਵਿੰਡੋ ਨੂੰ ਬੰਦ ਕਰਦੇ ਹੋ, ਫਿਰ ਵੀ ਜ਼ਿੱਦੀ ਟਾਸਕ ਮੈਨੇਜਰ ਵਿੱਚ ਜ਼ਿੱਦੀ ਕਿਰਿਆਸ਼ੀਲ ਰਹੀ ਹੈ. 🤔 ਭਾਵੇਂ ਤੁਸੀਂ X ਬਟਨ ਤੇ ਕਲਿਕ ਕਰਦੇ ਹੋ ਜਾਂ ਦਬਾਓ ALT + F4 , ਪ੍ਰੋਗਰਾਮ ਪੂਰੀ ਤਰ੍ਹਾਂ ਖਤਮ ਨਹੀਂ ਹੁੰਦਾ.
ਇਹ ਵਿਵਹਾਰ ਸਿਰਫ ਨਿਰਾਸ਼ਾਜਨਕ ਨਹੀਂ ਹੈ; ਇਹ ਵੀ ਮੈਮੋਰੀ ਲੀਕ ਹੋ ਸਕਦਾ ਹੈ ਅਤੇ ਪ੍ਰਦਰਸ਼ਨ ਦੇ ਮੁੱਦੇ ਜੇ ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ile ੇਰ ਦੇ ਕਈ ਉਦਾਹਰਣ ਹਨ. ਅਜਿਹੇ ਮੁੱਦੇ ਨੂੰ ਡੀਬੱਗਿੰਗ ਕਰਨਾ ਵਿੰਡੋ ਈਵੈਂਟ ਹੈਂਡਲਿੰਗ, ਸੰਦੇਸ਼ ਦੇ ਲੂਪਜ਼, ਅਤੇ ਸਰੋਤ ਸਫਾਈ ਵਿੱਚ ਇੱਕ ਡੂੰਘੀ ਗੋਤਾਖੋਰੀ ਦੀ ਜ਼ਰੂਰਤ ਹੈ. ਜੇ ਤੁਸੀਂ ਇਸ ਦਾ ਸਾਹਮਣਾ ਕਰ ਰਹੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ ਇਕੱਲੇ ਨਹੀਂ ਹੋ! ਬਹੁਤ ਸਾਰੇ C ++ ਡਿਵੈਲਪਰਸ ਇਸ ਵਿੱਚ ਚੱਲਦੇ ਹਨ ਵਿੰਡੋਜ਼ ਏਪੀਆਈ ਅਤੇ ਓਪਨਜੀਐਲ ਪ੍ਰਸੰਗਾਂ ਦੇ ਨਾਲ ਕੰਮ ਕਰਦੇ ਹਨ .
ਖੁਸ਼ਖਬਰੀ? ਇੱਥੇ ਹੱਲ ਹਨ . ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਨਾ ਕਿ ਡਬਲਯੂਐਮ_ਕਲੋਸ , ਡਬਲਯੂਐਮ_ਡੈਸਰੋ *, ਪੋਸਟਕੁਇਟਮੇਸੇਜ (0) ਸਹੀ ਤਰ੍ਹਾਂ ਸੰਭਾਲਿਆ ਜਾਂਦਾ ਹੈ ਅਕਸਰ ਇਸ ਨੂੰ ਠੀਕ ਕਰ ਸਕਦਾ ਹੈ. ਪਰ ਜੇ ਸਮੱਸਿਆ ਇਨ੍ਹਾਂ ਕਦਮਾਂ ਦੇ ਬਾਵਜੂਦ ਕਾਇਮ ਰਹਿੰਦੀ ਹੈ, ਤਾਂ ਇਕ ਡੂੰਘੀ ਚੀਜ਼ ਖੇਡ ਵਿਚ ਹੋਵੇ - ਸ਼ਾਇਦ ਇਕ ਲਟਕ ਰਹੀ ਥਰਿੱਡ, ਇਕ ਅਣਉਚਿਤ ਸਰੋਤ, ਜਾਂ ਅਣਦੇਖੀ ਸਰੋਤ ਨਿਰਭਰਤਾ. 🧐
ਇਸ ਲੇਖ ਵਿਚ, ਅਸੀਂ ਇਸ ਮੁੱਦੇ ਦੇ ਜੜ੍ਹਾਂ ਦਾ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰਦੇ ਹਾਂ * ਦਾ ਕਾਰਨ * ਦਾ ਕਾਰਨ ਬਣਦਾ ਹਾਂ, ਅਤੇ ਡੀਬੱਗਿੰਗ ਤਕਨੀਕਾਂ ਦੀ ਪੜਚੋਲ ਕਰਦਾ ਹਾਂ. ਭਾਵੇਂ ਤੁਸੀਂ ਓਪਨਰਜੀਐਲ ਜਾਂ ਇੱਕ ਤਜਿਤ ਸੀ ++ ਡਿਵੈਲਪਰ ਦੇ ਪ੍ਰਯੋਗ ਕਰ ਰਹੇ ਹੋ, ਇਹ ਗਾਈਡ ਤੁਹਾਨੂੰ ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਨ ਵਿੱਚ ਸਹਾਇਤਾ ਕਰੇਗੀ ਕਿ ਤੁਹਾਡੀ ਅਰਜ਼ੀ ਪੂਰੀ ਤਰ੍ਹਾਂ ਬੰਦ ਹੋ ਜਾਂਦੀ ਹੈ ਪੂਰੀ ਤਰ੍ਹਾਂ . 🚀
ਕਮਾਂਡ | ਵਰਤੋਂ ਦੀ ਉਦਾਹਰਣ |
---|---|
wglMakeCurrent | ਨਿਰਧਾਰਿਤ ਜੰਤਰ ਪ੍ਰਸੰਗ ਲਈ ਓਪਨਜੀਐਲ ਪੇਸ਼ਕਾਰੀ ਪ੍ਰਸੰਗ ਨਿਰਧਾਰਤ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ. ਜੇ ਸਹੀ ਤਰ੍ਹਾਂ ਅਨਸੈਟ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ, ਤਾਂ ਇਹ ਪ੍ਰਕ੍ਰਿਆ ਦੇ ਪਿਛੋਕੜ ਵਿਚ ਰਹਿਣ ਦਾ ਕਾਰਨ ਬਣ ਸਕਦੀ ਹੈ. |
wglDeleteContext | ਇੱਕ ਓਪਨਜੀਐਲ ਰੈਡਰਿੰਗ ਪ੍ਰਸੰਗ ਨੂੰ ਮਿਟਾਉਂਦਾ ਹੈ. ਇਸ ਦੇ ਨਤੀਜੇ ਵਜੋਂ ਮੈਮੋਰੀ ਲੀਕ ਹੋ ਸਕਦੇ ਹਨ ਅਤੇ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਬੰਦ ਕਰਨ ਤੋਂ ਰੋਕ ਸਕਦੇ ਹਨ. |
ReleaseDC | ਵਿੰਡੋ ਲਈ ਡਿਵਾਈਸ ਪ੍ਰਸੰਗ (ਡੀਸੀ) ਜਾਰੀ ਕਰਦਾ ਹੈ. ਜੇ ਇਹ ਸਹੀ ਤਰ੍ਹਾਂ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ, ਤਾਂ ਸਰੋਤ ਨਿਰਧਾਰਤ ਕੀਤੇ ਜਾ ਸਕਦੇ ਹਨ, ਜਿਸ ਨਾਲ ਪ੍ਰਕਿਰਿਆ ਸਮਾਪਤ ਹੋਣ ਦੇ ਮੁੱਦੇ. |
DestroyWindow | ਇੱਕ ਨਿਰਧਾਰਤ ਵਿੰਡੋ ਵਿੱਚ ਇੱਕ WM_Destrowy ਸੁਨੇਹਾ ਭੇਜਦਾ ਹੈ, ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਨਾ ਕਿ ਸਿਸਟਮ ਤੋਂ ਇਸ ਨੂੰ ਸਹੀ ਤਰ੍ਹਾਂ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ. |
PostQuitMessage | ਮੈਸੇਜ ਕਤਾਰ ਵਿੱਚ ਇੱਕ wm_quit ਸੁਨੇਹਾ ਪੋਸਟ ਕਰੋ, ਸੰਕੇਤ ਦਿਓ ਕਿ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਸਾਫ ਤੌਰ 'ਤੇ ਬੰਦ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ. |
TerminateProcess | ਜ਼ਬਰਦਸਤੀ ਇਕ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਇਸਦੇ ਹੈਂਡਲ ਦੇ ਦਿੱਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ. ਇਹ ਇੱਕ ਲੰਮੇ ਸਮੇਂ ਦੀ ਅਰਜ਼ੀ ਨੂੰ ਰੋਕਣ ਲਈ ਇੱਕ ਆਖਰੀ-ਰਿਜੋਰਟ method ੰਗ ਹੈ. |
OpenProcess | ਇੱਕ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਇੱਕ ਹੈਂਡਲ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ, ਜੋ ਕਿ ਜੇ ਜਰੂਰੀ ਹੋਵੇ ਤਾਂ ਇਸਨੂੰ ਖਤਮ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ. |
GetCurrentProcessId | ਕਾਲਿੰਗ ਪ੍ਰਕਿਰਿਆ ਦਾ ਪ੍ਰਕਿਰਿਆ ID ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ, ਡੀਬੱਗ ਕਰਨ ਅਤੇ ਹੱਥੀਂ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਹੱਥੀਂ ਖਤਮ ਕਰਨ ਲਈ ਲਾਭਦਾਇਕ ਹੈ. |
InvalidateRect | ਪੇਸ਼ਕਾਰੀ ਦੌਰਾਨ ਵਿਜ਼ੂਅਲ ਕਲਾਕ੍ਰਿਤੀਆਂ ਨੂੰ ਰੋਕਣ, ਵਿੰਡੋ ਦੇ ਇੱਕ ਹਿੱਸੇ ਨੂੰ ਨਿਸ਼ਾਨਬੱਧ ਕਰਦਾ ਹੈ. |
SetTimer | ਇੱਕ ਟਾਈਮਰ ਇਵੈਂਟ ਬਣਾਉਂਦਾ ਹੈ, ਅਕਸਰ ਲੂਪਾਂ ਪੇਸ਼ ਕਰਨ ਵਿੱਚ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ, ਪਰ ਜੇ ਤਾਂਖਟੀਏਅਰ ਨਾਲ ਸਹੀ ਤਰ੍ਹਾਂ ਨਹੀਂ ਰੁਕਦਾ, ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਖਤਮ ਕਰਨ ਨਾਲ ਮੁੱਦਿਆਂ ਦਾ ਕਾਰਨ ਬਣ ਸਕਦਾ ਹੈ. |
ਨਿਰੰਤਰ Win32 ਪ੍ਰਕਿਰਿਆਵਾਂ ਨੂੰ ਸਮਝਣਾ ਅਤੇ ਠੀਕ ਕਰਨਾ
ਜਦੋਂ ਕਿ ਓਪਨਜੀਐਲ ਨਾਲ Win ਵਿਨ 32 ਅਰਜ਼ੀਆਂ ਦਾ ਵਿਕਾਸ ਹੁੰਦਾ ਹੈ ਤਾਂ ਇੱਕ ਸਭ ਤੋਂ ਨਿਰਾਸ਼ਾਜਨਕ ਮੁੱਦੇ ਟਾਸਕ ਮੈਨੇਜਰ ਵਿੰਡੋ ਨੂੰ ਬੰਦ ਕਰਨ ਤੋਂ ਬਾਅਦ ਵੀ. ਇਹ ਆਮ ਤੌਰ 'ਤੇ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਸਿਸਟਮ ਦੇ ਸਰੋਤ ਅਜਿਹੇ ਡਿਵਾਈਸ ਦੇ ਪ੍ਰਸੰਗਾਂ (ਐਚਡੀਸੀ) ਜਾਂ ਓਪੰਗਲ ਰੈਡਰਿੰਗ ਪ੍ਰਸੰਗ (ਐਚਜੀਐਲਆਰਸੀ) ਸਹੀ ਤਰ੍ਹਾਂ ਜਾਰੀ ਨਹੀਂ ਕੀਤੇ ਜਾਂਦੇ. ਸਕ੍ਰਿਪਟਾਂ ਵਿੱਚ ਪਹਿਲਾਂ ਪ੍ਰਦਾਨ ਕੀਤੇ ਗਏ ਹਨ, ਕੁੰਜੀ ਫੋਕਸ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ WM_DOSTOY ਨੂੰ ਸੁਨਿਸ਼ਚਿਤ ਕਰਨਾ ਤੇ ਧਿਆਨ ਕੇਂਦ੍ਰਤ ਕਰਦਾ ਹੈ. ਪਹਿਲਾ ਹੱਲ ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਦਾ ਹੈ ਕਿ ਸੁਨੇਹਾ ਲੂਪ * ਸਹੀ ਵਰਤੋਂ ਦੁਆਰਾ ਬੰਦ ਕਰੋ ਪੋਸਟਕੁਇਟਮੇਸੇਜ (0), ਜੋ ਕਿ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਰੋਕਣ ਲਈ ਵਿੰਡੋਜ਼ ਨੂੰ ਸੰਕੇਤ ਦਿੰਦਾ ਹੈ. ਜੇ ਇਹ ਸੁਨੇਹਾ ਗੁੰਮ ਹੈ, ਤਾਂ ਪ੍ਰਕਿਰਿਆ ਪਿੱਠਭੂਮੀ ਵਿੱਚ ਚੱਲਦੀ ਰਹਿੰਦੀ ਹੈ.
ਦੂਜੀ ਸਕ੍ਰਿਪਟ ਨੇ ਇੱਕ ਆਮ ਓਪਨਜੀਐਲ-ਸੰਬੰਧੀ ਅੰਕੜੇ ਨਾਲ ਨਜਿੱਠਿਆ: ਰੈਂਡਰਿੰਗ ਪ੍ਰਸੰਗ ਨੂੰ ਜਾਰੀ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ . ਜੇ ਇੱਕ ਓਪਨਜੀਐਲ ਪ੍ਰਸੰਗ ਅਜੇ ਵੀ ਕਿਰਿਆਸ਼ੀਲ ਹੈ ਤਾਂ ਵਿੰਡੋ ਨਸ਼ਟ ਹੋ ਜਾਂਦਾ ਹੈ, ਵਿੰਡੋਜ਼ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਜਿੰਦਾ ਰੱਖ ਸਕਦੇ ਹਨ. ਇਸ ਲਈ ਸਕ੍ਰਿਪਟ ਸਪੱਸ਼ਟ ਤੌਰ 'ਤੇ ਕਾਲ ਕਰੋ ਡਬਲਯੂਜੀਐਲਐਮਈਕੁਏਰੈਂਟ (ਨਲ, ਨਲ) wgldeleteTCuntext () ਨਾਲ ਇਸ ਨੂੰ ਹਟਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਓਪਨਗੀਕਲੈਪੈਂਟ (ਨਲ, ਨਲ)) ਨੂੰ ਅਯੋਗ ਕਰਨ ਲਈ. ਇਸ ਤੋਂ ਇਲਾਵਾ, ਰੈਡਕ () ਵਿੰਡੋ ਨਾਲ ਜੁੜੇ ਉਪਕਰਣ ਦੇ ਪ੍ਰਸੰਗ ਨੂੰ ਮੁਕਤ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ. ਇਹ ਕਦਮ ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਦੇ ਹਨ ਕਿ ਕੋਈ ਰਿਣੀ ਰਹੇ ਸਰੋਤਾਂ ਪਿੱਛੇ ਛੱਡੀਆਂ ਜਾਂਦੀਆਂ ਹਨ. ਓਪਨਗੀਲ ਗੇਮ 'ਤੇ ਕੰਮ ਕਰਨ ਦੀ ਕਲਪਨਾ ਕਰੋ , ਅਤੇ ਹਰ ਵਾਰ ਜਦੋਂ ਤੁਸੀਂ ਵਿੰਡੋ ਨੂੰ ਬੰਦ ਕਰਦੇ ਹੋ, ਤਾਂ ਇਹ ਸੀਪੀਯੂ ਅਤੇ ਜੀਪੀਯੂ ਦੇ ਸੰਕੁਚਿਤ ਕਰਦਾ ਰਹਿੰਦਾ ਹੈ . ਇਹ ਬਿਲਕੁਲ ਉਹੀ ਕਿਸਮ ਦਾ ਮੁੱਦਾ ਹੈ ਜਿਸ ਨੂੰ ਅਸੀਂ ਹੱਲ ਕਰ ਰਹੇ ਹਾਂ. 🎮
ਜੇ ਇਹ ਅਜੇ ਵੀ ਮੌਜੂਦ ਹੈ ਤਾਂ ਤੀਜੀ ਸਕ੍ਰਿਪਟ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਹੱਥੀਂ ਖਤਮ ਕਰਕੇ ਵਧੇਰੇ ਹਮਲਾਵਰ ਪਹੁੰਚ ਹੁੰਦੀ ਹੈ. ਇਹ ਡੀਬੱਗਿੰਗ ਵਾਲੇ ਦ੍ਰਿਸ਼ਾਂ ਵਿੱਚ ਲਾਭਦਾਇਕ ਹੈ ਜਿਥੇ ਸਟੈਂਡਰਡ ਸਫਾਈ ਦੇ ਮਾਇਮ ਹਨ. ਓਪਨਪ੍ਰੋਸੈਸ () , ਸਕ੍ਰਿਪਟ ਨੂੰ ਚੱਲ ਰਹੀ ਪ੍ਰਕਿਰਿਆ ਅਤੇ ਕਾਲਾਂ ਲਈ ਇੱਕ ਹੈਂਡਲ ਮਿਲਦੀ ਹੈ ਬੰਦ ਕਰਨ ਵਾਲੇ ਨੂੰ ਜ਼ਬਰਦਸਤੀ ਖਤਮ ਕਰਨ ਲਈ. ਹਾਲਾਂਕਿ ਇਹ ਆਮ ਤੌਰ 'ਤੇ ਸਧਾਰਣ ਐਪਲੀਕੇਸ਼ਨਾਂ ਲਈ ਸਰਬੋਤਮ ਅਭਿਆਸ ਨਹੀਂ ਹੁੰਦਾ, ਇਹ ਸਮੱਸਿਆ ਨਿਪਟਾਰਾ ਕਰਨ ਲਈ ਜੀਵਨ ਬਚਾਉਣ ਵਾਲਾ ਹੋ ਸਕਦਾ ਹੈ. ਉਦਾਹਰਣ ਦੇ ਲਈ, ਜੇ ਤੁਸੀਂ ਗ੍ਰਾਫਿਕਸ-ਇੰਟੈਂਸਿਵ ਐਪਲੀਕੇਸ਼ਨ 'ਤੇ ਕੰਮ ਕਰ ਰਹੇ ਹੋ , ਤੁਸੀਂ ਵੇਖ ਸਕਦੇ ਹੋ ਕਿ ਐਪ ਨੂੰ ਬੰਦ ਕਰਨ ਦੇ ਬਾਅਦ ਵੀ ਕੁਝ ਪ੍ਰਦੇਸ਼ਾਂ ਵਿੱਚ ਚੱਲਦੇ ਹਨ ਰੈਮ ਅਤੇ ਜੀਪੀਯੂ ਮੈਮੋਰੀ ਖਪਤ . RISTATETPROCSS () ਵਿੱਚ ਰੂਟ ਕਾਰਨ ਨੂੰ ਡੀਬੱਗ ਕਰਨ ਵੇਲੇ ਅਸਥਾਈ ਫਿਕਸ ਹੋ ਸਕਦੇ ਹਨ. 🔍
ਅੰਤ ਵਿੱਚ, ਕਮਾਂਡਾਂ ਦੀ ਸਾਰਣੀ ਖਾਸ ਵਿਨ 32 ਫੰਕਸ਼ਨ ਵਿੱਚ ਚਰਚਾ ਨਹੀਂ ਕੀਤੀ ਜਾਂਦੀ ਪਰ ਪ੍ਰਬੰਧਨ ਵਿੱਚ ਇੱਕ ਮਹੱਤਵਪੂਰਣ ਭੂਮਿਕਾ ਅਦਾ ਕਰੋ ਪ੍ਰਕਿਰਿਆ ਕਰਨ ਵਿੱਚ ਇੱਕ ਅਹਿਮ ਭੂਮਿਕਾ ਅਦਾ ਕਰੋ ਪ੍ਰਕਿਰਿਆ ਕਰੋ ਫੰਕਸ਼ਨ ਨੂੰ ਸਮਝਣ ਦੁਆਰਾ ਜਿਵੇਂ ਐਸਟੀਟੀਐਮਟਰ () ਅਤੇ , ਡਿਵੈਲਪਰ ਵਿੰਡੋ ਨੂੰ ਬੰਦ ਹੋਣ ਤੋਂ ਬਾਅਦ ਵੀ ਟਾਈਮਰਾਂ ਤੋਂ ਬਚ ਸਕਦੇ ਹਨ. ਡੀਬੱਗਿੰਗ ਵਿਨ 32 ਅਰਜ਼ੀਆਂ ਬਹੁਤ ਜ਼ਿਆਦਾ ਮਹਿਸੂਸ ਕਰ ਸਕਦੀਆਂ ਹਨ, ਪਰ ਸਹੀ ਸੁਨੇਹਾ ਹੈਂਡਲਿੰਗ, ਸਰੋਤ ਸੰਪੂਰਣਤਾ ਅਤੇ ਪ੍ਰਕਿਰਿਆ ਪ੍ਰਬੰਧਨ ਜਦੋਂ ਕਿ ਤੁਹਾਡੀ ਅਰਜ਼ੀ ਬਾਹਰ ਨਹੀਂ ਕਰ ਦਿੰਦੀ ਟਾਸਕ ਮੈਨੇਜਰ * *. 🚀
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;
}
ਵਿਨ 32 ਅਰਜ਼ੀਆਂ ਵਿੱਚ ਮੈਮੋਰੀ ਲੀਕ ਨੂੰ ਰੋਕਣਾ
ਜਦੋਂ ਏ ਵਿਨ 32 ਐਪਲੀਕੇਸ਼ਨ ਸਹੀ ਤਰ੍ਹਾਂ ਖਤਮ ਨਹੀਂ ਹੁੰਦਾ, ਇਹ ਵਿੰਡੋ ਨੂੰ ਬੰਦ ਕਰਨ ਨਾਲ ਸਿਰਫ ਕੋਈ ਮੁੱਦਾ ਨਹੀਂ ਹੋ ਸਕਦਾ; ਇਹ ਮੈਮੋਰੀ ਲੀਕ ਅਤੇ ਅਸੰਬੰਧਿਤ ਸਰੋਤਾਂ ਨਾਲ ਵੀ ਸੰਬੰਧਿਤ ਹੋ ਸਕਦਾ ਹੈ . ਇੱਕ ਵਿੰਡੋਜ਼ ਏਪੀਆਈ-ਅਧਾਰਤ ਐਪਲੀਕੇਸ਼ਨ ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਡਿਵਾਈਸ ਦੇ ਪ੍ਰਸੰਗਾਂ (ਡੀਸੀ), ਗ੍ਰਾਫਿਕਸ ਪ੍ਰਸੰਗ (ਡੀਸੀ), ਗ੍ਰਾਫਿਕਸ ਪ੍ਰਸੰਗਾਂ, ਅਤੇ ਹੈਂਡਲਡ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਹੈਂਡਲ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ. ਜੇ ਇਹ ਸਹੀ ਤਰ੍ਹਾਂ ਸਾਫ਼ ਨਹੀਂ ਕੀਤੇ ਜਾਂਦੇ, ਤਾਂ ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਉਸ ਪ੍ਰਕਾਰ ਨੂੰ ਬੈਕਗ੍ਰਾਉਂਡ ਵਿੱਚ ਚੱਲਦਾ ਰੱਖ ਸਕਦਾ ਹੈ.
ਅਜਿਹੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ ਇੱਕ ਅਣਦੇਖੀ ਪਹਿਲੂ ਸਹੀ ਹੈ ਥਰਿੱਡਾਂ ਦਾ ਪ੍ਰਬੰਧਨ . ਕੁਝ ਵਿਨ 32 ਅਰਜ਼ੀਆਂ ਸਪੈਨ ਵਰਕਰ ਥ੍ਰੈਡਸ ਇਹ ਮੁੱਖ ਵਿੰਡੋ ਦੇ ਬੰਦ ਹੋਣ ਤੋਂ ਬਾਅਦ ਵੀ ਚਲਣਾ ਜਾਰੀ ਰੱਖਦੀਆਂ ਹਨ. ਜੇ ਪ੍ਰੋਗਰਾਮ ਮਲਟੀਟ੍ਰੀਡ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰੋ ਕਿ ਸਾਰੇ ਵਰਕਰ ਥ੍ਰੈਡਸ ਕਾਲ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਸਹੀ ਤਰ੍ਹਾਂ ਖਤਮ ਹੋ ਜਾਂਦੇ ਹਨ ਪੋਸਟਕੁਇਟਮੇਸੇਜ (0) ਮਹੱਤਵਪੂਰਨ ਹੈ. ਇੱਕ ਆਮ ਗਲਤੀ ਵਰਕਰ ਥ੍ਰੈਡਸ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਣ ਲਈ ਭੁੱਲ ਜਾਂਦੀ ਹੈ ਡਿਵੈਲਪਰ ਅਕਸਰ ਕੰਮ ਕਰਦੇ ਸਮੇਂ ਇਸ ਮੁੱਦੇ ਦਾ ਸਾਹਮਣਾ ਕਰਦੇ ਹਨ ਰੈਂਡਰਿੰਗ ਲੂਪਸ ਓਪਨਜੀਐਲ ਵਿੱਚ, ਜਿੱਥੇ ਪਿਛੋਕੜ ਦੇ ਬੰਦ ਹੋਣ ਤੋਂ ਬਾਅਦ ਵੀ ਪਿਛੋਕੜ ਦੇ ਗਣਨਾ ਜਾਰੀ ਰਹਿ ਸਕਦੇ ਹਨ. 🎮
ਇਕ ਹੋਰ ਮੁੱਖ ਕਾਰਕ ਇਹ ਹੈ ਕਿ ਕਿਵੇਂ ਬਾਹਰੀ ਲਾਇਬ੍ਰੇਰੀਆਂ ਐਪਲੀਕੇਸ਼ਨ ਬੰਦ ਪ੍ਰਕਿਰਿਆ ਨਾਲ ਗੱਲਬਾਤ ਕਰਦੇ ਹਨ. ਕੁਝ ਲਾਇਬ੍ਰੇਰੀਆਂ, ਖਾਸ ਤੌਰ 'ਤੇ ਗ੍ਰਾਫਿਕਸ-ਸੰਬੰਧੀ ਪਸੰਦ ਹਨ ਜੇ ਕੋਈ ਐਪਲੀਕੇਸ਼ਨ ਡਬਲਯੂਜੀਐਲਮੇਕਰੈਂਟ () ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ ਤਾਂ * * ਪੇਸ਼ ਕਰਨ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ, ਪ੍ਰਕਿਰਿਆ ਕਿਰਿਆਸ਼ੀਲ ਰਹਿ ਸਕਦੀ ਹੈ. ਇਸ ਨੂੰ ਰੋਕਣ ਲਈ, nglmakecurrent (ਨਲ, ਨਲ) ਨੂੰ ਮਿਟਾਉਣ ਤੋਂ ਪਹਿਲਾਂ, ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਸਹੀ ਤਰ੍ਹਾਂ ਜਾਰੀ ਕੀਤੇ ਜਾਣ ਵਾਲੇ ਹਨ. 'ਤੇ ਧਿਆਨ ਕੇਂਦਰਤ ਕਰਕੇ, ਥ੍ਰੈਡ ਪ੍ਰਬੰਧਨ, ਥ੍ਰੈਡ ਪ੍ਰਬੰਧਨ, ਅਤੇ ਬਾਹਰੀ ਲਾਇਬ੍ਰੇਰੀ ਸਫਾਈ, , ਡਿਵੈਲਪਰ ਟਾਸਕ ਮੈਨੇਜਰ ਵਿੱਚ ਲਿੰਕੀ ਨਾਲ ਬਾਹਰ ਨਿਕਲ ਸਕਦੇ ਹਨ . 🚀
ਨਿਰੰਤਰ ਵਿਨ 32 ਪ੍ਰਕਿਰਿਆਵਾਂ ਲਈ ਸਾਂਝੇ ਮੁੱਦੇ ਅਤੇ ਹੱਲ
- ਬੰਦ ਹੋਣ ਤੋਂ ਬਾਅਦ ਵੀ ਟਾਸਕ ਮੈਨੇਜਰ ਵਿੱਚ ਮੇਰਾ Win32 ਬਿਨੈਪੱਪ ਕਿਉਂ ਰਹਿੰਦਾ ਹੈ?
- ਇਹ ਹੋ ਸਕਦਾ ਹੈ ਜੇ ਵਿੰਡੋ ਹੈਂਡਲ , ਓਪਨਿੰਗਲ ਪ੍ਰਸੰਗਿਕ , ਜਾਂ ਥ੍ਰੈਡਸ ਸਹੀ ਤਰ੍ਹਾਂ ਜਾਰੀ ਨਹੀਂ ਕੀਤੇ ਜਾਂਦੇ. ਹਮੇਸ਼ਾਂ ਪੱਕਾ ਯਕੀਨ ਕਰੋ ਨਸ਼ਟਵਾਿੰਡੋ () , wglDeleteContext(), ਅਤੇ PostQuitMessage(0) ਸਹੀ ਤਰ੍ਹਾਂ ਵਰਤੇ ਜਾਂਦੇ ਹਨ.
- ਮੈਂ ਕਿਵੇਂ ਜਾਂਚ ਕਰਾਂਗਾ ਕਿ ਮੇਰੀ ਅਰਜ਼ੀ ਤੇ ਅਜੇ ਵੀ ਧਾਗਾ ਚਲ ਰਿਹਾ ਹੈ?
- ਤੁਸੀਂ ਵਿੰਡੋਜ਼ ਟਾਸਕ ਮੈਨੇਜਰ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ ਜਾਂ ਕਾਲ ਕਰੋ GetProcessId() ਤੁਹਾਡੀ ਅਰਜ਼ੀ ਦੇ ਅੰਦਰ ਸਰਗਰਮ ਥ੍ਰੈਡ ਅਤੇ ਪ੍ਰਕਿਰਿਆਵਾਂ ਦਾ ਨਿਰੀਖਣ ਕਰਨ ਲਈ.
- ਜੇ ਮੈਂ ਵਰਤਦਾ ਹਾਂ ਤਾਂ ਕੀ ਹੁੰਦਾ ਹੈ ExitProcess(0) ਮੇਰੀ ਅਰਜ਼ੀ ਨੂੰ ਬੰਦ ਕਰਨ ਲਈ?
- ਐਬਿਟ ਪ੍ਰੋਸੈਸ (0) ਜ਼ਬਰਦਸਤੀ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਬੰਦ ਕਰ ਦਿਓ, ਪਰ ਇਹ ਮੈਮੋਰੀ ਜਾਂ ਫਾਈਲ ਹੈਂਡਲ ਵਰਗੇ ਸਰੋਤਾਂ ਦੀ ਸਹੀ ਸਫਾਈ ਦੀ ਆਗਿਆ ਨਹੀਂ ਦਿੰਦਾ. ਇਹ ਸਿਰਫ ਇੱਕ ਆਖਰੀ-ਰਿਜੋਰਟ ਹੱਲ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ.
- ਕਰਦਾ ਹੈ TerminateProcess() ਨਾਲੋਂ ਬਿਹਤਰ ਕੰਮ ਕਰੋ PostQuitMessage(0)?
- ਨਹੀਂ, ਟਰਮੀਨੇਟ ਪ੍ਰੋਸੈਸ () ਬਹੁਤ ਜ਼ਿਆਦਾ ਹਮਲਾਵਰ ਹੈ ਅਤੇ ਸਰੋਤ ਲੀਕ ਦਾ ਕਾਰਨ ਬਣ ਸਕਦਾ ਹੈ. ਪੋਸਟਕੁਇਸ਼ਨ (0) ਸਾਫ਼ ਬੰਦ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਦਾ ਤਰਜੀਹੀ ਤਰੀਕਾ ਹੈ.
- ਮੈਂ ਕਿਵੇਂ ਡੀਬੱਗ ਕਰ ਸਕਦਾ ਹਾਂ ਕਿ ਮੇਰੀ ਅਰਜ਼ੀ ਅਜੇ ਵੀ ਚੱਲ ਰਹੀ ਹੈ?
- ਵਰਤੋ ਪ੍ਰਕਿਰਿਆ ਐਕਸਪਲੋਰਰ ਬਾਕੀ ਰਹਿੰਦੀਆਂ ਹਨ ਬਾਕੀ ਹੈਂਡਸ ਦੀ ਜਾਂਚ ਕਰੋ ਅਤੇ ਡੀਬੱਗਰ ਟੂਲਸ ਟਰੈਕ ਕਰਨ ਲਈ ਐਪਲੀਕੇਸ਼ਨ ਦੇ ਕਿਹੜੇ ਹਿੱਸੇ ਨੂੰ ਟਰੈਕ ਕਰਨਾ ਬੰਦ ਕਰ ਰਿਹਾ ਹੈ.
Win32 ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਸਹੀ ਤਰ੍ਹਾਂ ਬੰਦ ਕਰਨਾ
ਇੱਕ ਵਿਨ 32 ਅਰਜ਼ੀ ਲਈ ਇੱਕ ਕਲੀਨ ਐਗਜ਼ਿਟ ਯਕੀਨੀ ਬਣਾਉਣਾ ਲਈ ਜ਼ਰੂਰੀ ਹੈ ਲਈ ਟਾਸਕ ਮੈਨੇਜਰ ਵਿੱਚ ਲਿੰਕੇਡਿੰਗ ਪ੍ਰਕਿਰਿਆਵਾਂ ਤੋਂ ਪਰਹੇਜ਼ ਕਰਨਾ . ਇਸ ਲੇਖ ਤੋਂ ਚੰਗੀ ਤਰ੍ਹਾਂ ਸੰਭਾਲਣ ਵਾਲੇ ਮੁੱਖ ਤੰਦਰੁਸਤ ਸ਼ਾਮਲ ਹਨ ਡਬਲਯੂਐਮ_ਡੈਸਟਰੋ , ਸਹੀ ਤਰ੍ਹਾਂ ਜਾਰੀ ਬੰਦ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਪਹਿਲਾਂ ਹੀ ਖਤਮ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ. 🛠️
ਡੀਬੱਗਿੰਗ ਅਜਿਹੇ ਮੁੱਦਿਆਂ ਨੂੰ ਪ੍ਰਣਾਲੀ ਭਰਪੂਰ ਤੌਰ 'ਤੇ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰਨ ਦੀ ਜ਼ਰੂਰਤ ਹੈ ਸੰਕੁਚਨਾਂ ਸੰਦਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਟੂਲਜ਼ ਪਸੰਦ ਕਰਦੇ ਹਨ ਉਪਕਰਣ ਐਕਸਪਲੋਰਰ ਚੱਲ ਰਹੇ ਹੈਂਡਲਜ਼ ਨੂੰ ਟਰੈਕ ਕਰਨ ਲਈ ਭਾਵੇਂ ਤੁਸੀਂ ਇੱਕ ਸਧਾਰਣ ਓਪਨਰਜੀ ਵਿੰਡੋ ਬਣਾ ਰਹੇ ਹੋ ਜਾਂ ਗੁੰਝਲਦਾਰ ਗ੍ਰਾਫਿਕਲ ਐਪਲੀਕੇਸ਼ਨ , ਮਾਸਟਰਿੰਗ ਸਰੋਤ ਸਵੱਛਪ ਤੁਹਾਨੂੰ ਇਨ੍ਹਾਂ ਨਿਰਾਸ਼ਾਜਨਕ ਮੁਸ਼ਕਲਾਂ ਤੋਂ ਬਚਣ ਵਿੱਚ ਸਹਾਇਤਾ ਕਰੇਗੀ ਅਤੇ ਇਹ ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਤੁਹਾਡੇ ਪ੍ਰੋਗਰਾਮਾਂ ਨੂੰ ਸੁਚਾਰੂ rad ੰਗ ਨਾਲ ਖਤਮ ਕਰੋ. 🎯
ਭਰੋਸੇਯੋਗ ਹਵਾਲਿਆਂ ਅਤੇ ਲਾਭਦਾਇਕ ਸਰੋਤ
- ਤੇ ਅਧਿਕਾਰਤ ਮਾਈਕਰੋਸੌਫਟ ਡੌਕੂਮੈਂਟੇਸ਼ਨ Win32 API ਅਤੇ ਵਿੰਡੋ ਮੈਨੇਜਮੈਂਟ: ਮਾਈਕ੍ਰੋਸਾੱਫਟ ਵਿਨ 3 ਏਪੀਆਈ
- ਓਪਨਜੀਐਲ ਪ੍ਰਸੰਗ ਪ੍ਰਬੰਧਨ ਅਤੇ ਵਧੀਆ ਅਭਿਆਸ: ਖਰੋਨੀਸ ਓਪਨਜੀਐਲ ਦਸਤਾਵੇਜ਼ੀ
- ਵਿੰਡੋਜ਼ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ ਚੱਲ ਰਹੇ ਕਾਰਜਾਂ ਨੂੰ ਡੀਬੱਗ ਕਰਨਾ: ਮਾਈਕ੍ਰੋਸਾੱਫਟ ਪ੍ਰਕਿਰਿਆ ਐਕਸਪਲੋਰਰ
- ਅਣਸੁਲਝੇ ਵਿਨ 32 ਪ੍ਰਕਿਰਿਆਵਾਂ ਤੇ ਓਵਰਫਲੋਅ ਡਿਸਕੋਇਸ਼ਨ: ਸਟੈਕ ਓਵਰਫਲੋ
- ਵਿੰਡੋਜ਼ ਏਪੀਆਈ ਫੰਕਸ਼ਨ ਦੇ ਹਵਾਲੇ ਪੋਸਟਕੁਇਟਮੇਜੇਜ () ਅਤੇ ਨਸ਼ਟਵਾਿੰਡੋ (): ਵਿੰਡੋਜ਼ ਯੂਜ਼ਰ ਏਪੀਆਈ