能力值:
( LV2,RANK:10 )
|
-
-
2 楼
没看明白什么意思。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
要知道,一个进程中的所有线程都退出了,系统才会回收进程的资源,即进程才会结束。你写的代码执行完了,只能表示主线程退出了,不能代表所有线程都退出了。如果不想使用ExitProcess,就自己清理吧。
|
能力值:
( LV9,RANK:160 )
|
-
-
4 楼
C也用了TernimateProcess函数,只是你看不到而已,呆到程序退出时你跟进去就知道了,只是这个事情是编译器帮你做了而已,跟进去发现退出是exit函数……
|
能力值:
( LV11,RANK:188 )
|
-
-
5 楼
系统默认的只会给程序的主线程结束后调用exitthread而不是exitprocess。但c的maincrt头在调用 main ()后紧跟着一个 exit () 所以是正常的
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
似乎明白了,但是无法解释同一个程序(/nodefaultlib编译,程序中不使用类似的退出函数),在不同的XP下有的进程能正常退出,有的出现问题的现象,不知是否有解...
|
能力值:
( LV11,RANK:188 )
|
-
-
7 楼
/nodefaultlib 代表不显示链接msvcrt之类的库。这样我记得exit会用vc里面的crt源代码编译到程序里。有的进程正常退出,有的不能正常退出,是不是因为你自定义的程序的入口点?其实自己进程序入口点看一下就了解了。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
小白还是,不会看!确实自定义了入口点,比如:
#include <windows.h>
#include <commctrl.h>
#pragma comment(linker, "/nodefaultlib")
#pragma comment(lib, "kernel32.lib")
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "gdi32.lib")
#pragma comment(lib, "comctl32.lib")
#pragma comment(linker, "/OPT:NOWIN98")
#pragma comment(linker, "/ENTRY:WinMain")
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hWinMain;
MSG stMsg;
WNDCLASS stWndClass;
stWndClass.cbClsExtra = 0;
stWndClass.cbWndExtra = 0;
stWndClass.hbrBackground = (HBRUSH)(GetStockObject(LTGRAY_BRUSH));
stWndClass.hCursor = LoadCursor(NULL,IDC_ARROW);
hInstance = GetModuleHandle(NULL);
stWndClass.hIcon = NULL;
stWndClass.hInstance = hInstance;
stWndClass.lpfnWndProc = WndProc;
stWndClass.lpszClassName = "NoExit_test";
stWndClass.lpszMenuName = NULL;
stWndClass.style = 0;
if(!RegisterClass(&stWndClass))
{
return FALSE;
}
hWinMain = CreateWindow("NoExit_test", "NoExit_test App.", WS_OVERLAPPEDWINDOW, 100, 100, 600, 400, NULL, NULL, hInstance, NULL);
ShowWindow(hWinMain, SW_SHOW);
UpdateWindow(hWinMain);
while(GetMessage(&stMsg, NULL, 0, 0))
{
TranslateMessage(&stMsg);
DispatchMessage(&stMsg);
}
return stMsg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_CREATE:
InitCommonControls();
break;
case WM_DESTROY:
PostQuitMessage(0);
//ExitProcess(0);
break;
//case WM_CLOSE:
//DestroyWindow(hWnd);
//break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
}
按以上方式在VC6下编译。
另外,并非"有的程序能正常退出,有的不能正常退出",而是"按以上方式编译的程序,在不同的XP下,要么都能正常退出,要么都无法退出 进程,而且现在仅发现不能退出的XP为E文版",另外还出现过"刚装的E文XP此类程序运行正常,打了补丁就范毛病了"
不知是我叙述有问题还是...
|
能力值:
( LV7,RANK:110 )
|
-
-
9 楼
ExitProcess相当于强退
|
|
|