• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 64, 文章 - 11, 評論 - 12, 引用 - 0
            數據加載中……

            進程初探之<3> 進程死亡

                  人這一生都會經過出生、生長、死亡這幾個階段,出生就意味著必須面對死亡。故佛學經典中常有空即是色、色即是空,生就是死、死就是生這些深奧的佛義??v觀這世間的一切又何嘗不是這樣。海龜可以說是長壽的動物了,經??梢钥吹綀笳f某只海龜活了幾千年,但地球自從誕生生物以來又何止幾千年了。在前面,進程已經被啟動起來了,也已經在跑了,現在還有一個過程它也是必須經歷的了那就是死亡了。本人覺得寫這個進程死亡這個題目有點沉重,人總是希望聽到生長有關的,而不愿聽到諸如一些灰色的詞語。至少對于我來說是這樣的了,本想起標題為進程的退出,或者進程的隱藏但覺總不得體。退出含有一種自愿性的離開之意,但有時的情況卻往往不會是這樣的,比如我們通過任務管理器來終止一個應用程序,這時我想它就是非自愿的動作了。還有一促極端的情況,電腦掉電了。隱藏這個詞語就有更不貼切的地方,還有隱藏這個詞對進程來說是它確實存在的一種狀態,這將更為復雜。故起名為進程死亡一題,前也說過死亡有正常死亡,壽終正寢、及意外死亡這兩種。
                  正常死亡,壽終正寢指的是進程完成了它的工作,它走到了它生命的盡頭。于是穿過一個花括號,好似穿過一片淡薄的白云而登仙樂。
            如下的一個簡單的例子。
            #include <iostream.h>

            int main()
            {
                
            int i=2;
                
            if(2==i)
                
            {
                    i
            ++;
                }

                
            return i;
            }
            上面這個例子就會在執行完return i;之后的"{"壽終正寢。沒有執行完這個花括號就不能算作壽終正寢。比如說這時有一個高優先級的線程取得了CPU的使用權,并用將這個進程殺死掉。
                  進程的意外死亡可以有自己來操縱也可以是外部使力而使它突然終止。進程要殺死自己很簡單,只要調用ExitProcess就行了。這個函數功能是很強,以致有些霸道。會使進程來不及釋放有關的資源比如用new操作符申請的一段內存,調用了第三組件而不能再去為第三方的組件執行一個Release 這樣的通知。這樣引起的問題似乎相當不妙。幸好這個進程的內核對象會隨著它的死亡而減少引用計數或者被收回。所以使用這個函數時還是三思而行,應盡量避免。那么外部的一個線程又該如何終止進程呢?這得用TerminateProcess這個函數了,想說的是這個函數象前面的函數一樣也是立即終止一個進程,而不會給被終止的進程留一口氣。上述這兩種方法用起來還是三思為好。對于有窗口的應用程序有更漂亮的方法來讓它退出,找到這個進程的窗口,然后對著這個窗口發一個退出的消息。這樣就比較文明了,因為有機會給程序做一些善后的工作。如下的程序就可以終止你已經開啟的計算器程序。
            #include "stdafx.h"
            #include 
            <windows.h>
            #include 
            <iostream.h>

            int main(int argc, char* argv[])
            {
                DWORD dwCurrentId,dwControlId;
                dwCurrentId
            =GetCurrentProcessId();
                cout
            <<"Current process Id: "<<dwCurrentId<<endl;
                HWND hwnd
            =FindWindow("SciCalc",NULL);    
                GetWindowThreadProcessId(hwnd,
            &dwControlId);
                HANDLE controlHandle
            =OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwControlId);
                cout
            <<"Calc Process Id :"<<dwControlId<<endl;
                
            //PostMessage(hwnd,WM_QUIT,0,0);
                TerminateProcess(controlHandle,0);
                
            return 0;
            }

            我注釋掉的post方法就是文明終止進程的例子。

                  當我玩游戲過了通關時,只能自豪地看著我操控的角色穿著金色的戰衣,神采飛揚地面對著東方徐徐升起的太陽幾分鐘。而后機器又恢復到了啟動的狀態,這一切也就過去了。我也得趕快返回學校去上晚自習。但是這里的并不是我玩游戲的所有樂趣,真的樂趣還是在戰斗的過程中。進程的吸引人也不會只這么一點,還有更精采的將要上演........。

            posted on 2008-03-22 16:05 Robertxiao 閱讀(368) 評論(0)  編輯 收藏 引用 所屬分類: Windows/MFC探索

            久久亚洲AV永久无码精品| 精品久久久久国产免费 | 午夜不卡久久精品无码免费| 久久国产精品视频| 久久国内免费视频| 久久狠狠色狠狠色综合| 无码任你躁久久久久久| 欧美久久久久久午夜精品| 亚洲国产婷婷香蕉久久久久久| 久久国产劲爆AV内射—百度| 日本三级久久网| 性做久久久久久久久老女人| 777午夜精品久久av蜜臀| 亚洲国产精品久久久久| 久久精品黄AA片一区二区三区| 亚洲精品99久久久久中文字幕| 亚洲中文字幕久久精品无码APP| 国产2021久久精品| 国产婷婷成人久久Av免费高清| 欧美黑人激情性久久| 久久久久一级精品亚洲国产成人综合AV区| 亚洲精品无码久久久久久| 中文字幕久久精品| 麻豆av久久av盛宴av| 伊人色综合久久| 国产精品久久久久久久午夜片 | 国产精品久久亚洲不卡动漫| 国内精品久久久久影院薰衣草| 久久精品一区二区三区AV| 久久精品国产亚洲av麻豆图片 | 99久久99久久| 人人狠狠综合88综合久久| 色偷偷91久久综合噜噜噜噜| 久久国产精品偷99| 欧洲精品久久久av无码电影| 国内精品伊人久久久久777| 精品伊人久久久| 久久99精品久久只有精品| 996久久国产精品线观看| 久久久久亚洲爆乳少妇无| 亚洲国产精品无码久久SM|