• <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>
            春暖花開
            雪化了,花開了,春天來了
            posts - 149,comments - 125,trackbacks - 0
            這個的確還是挺頭疼的。前一階段同學告訴我,很不幸,今天又給忘了。
            查了一下,再根據模糊記憶,還是把方框打上了對勾。

            可能你也有這樣的煩惱,不妨我們來看一下:

            在word字體中選擇Wingdings2,然后寫一個大寫R,這樣你就看到方框打對勾了。

            好記性真不如爛筆頭,占此一角,記錄一下。

            posted @ 2009-03-31 15:44 Sandy 閱讀(5440) | 評論 (7)編輯 收藏

            Windows mobile 中 outlook 中任務,約會,聯系人,在調用時,有相應的database oid
            對應的database oid 不是很清楚,我通過實驗,發現,任務是13, 約會是9, 聯系人是10.

            那有沒有專門的數值對應呢?查了一下,發現這么個東東:

            typedef /* [v1_enum] */
            enum OlDefaultFolders
                {   olFolderCalendar    = 9,
                    olFolderContacts    = 10,
                    olFolderTasks       = 13,
                    olFolderCities      = 101,
                    olFolderInfrared    = 102,
                } OlDefaultFolders;

            和我們的實驗數據一樣.

            不錯吧.

            posted @ 2009-03-30 16:32 Sandy 閱讀(230) | 評論 (0)編輯 收藏
            最近在搞一個小東東,
            里面涉及到了DATE和SYSTEMTIME的轉換,沒有用到過,記錄一下.

              DATE 轉換成SYSTEMTIME
              VariantTimeToSystemTime
              其原型為:
              INT VariantTimeToSystemTime(
              double
            vtime,             
              LPSYSTEMTIME lpSystemTime 
              );
              

               SYSTEMTIME轉換成DATE
               SystemTimeToVariantTime
              其原型為:
              INT SystemTimeToVariantTime(
              LPSYSTEMTIME
            lpSystemTime, 
              double        *pvtime          
              );
            posted @ 2009-03-26 09:21 Sandy 閱讀(1709) | 評論 (0)編輯 收藏
                   今天調試安裝文件的對話框,橫屏的時候,Edit框的顯示,總會隨著滾動條往上移動,下面顯示出一大片的空白。

                  很是郁悶啊……

                   在代碼中修改了很長時間,找不出原因,最后和別人代碼比對的時候,發現我竟然是在資源文件中的對話框屬性定義中比別人多一個WS_BORDER屬性,問題迎刃而解。

                     但究其原因,還不是很清楚。

                     WS_BORDER: Create a window that has a border.

                      似乎也看不出來什么原因。
            posted @ 2009-03-18 19:00 Sandy 閱讀(219) | 評論 (2)編輯 收藏
                   
                    在Windows Mobile中,Edit控件在具有WS_VSCROLL的時候,無論顯示文字的多少,都會顯示滾動條。如何在顯示文字不到一頁的情況下,讓滾動條不顯示呢?

                     我是這樣考慮的:判斷顯示文字的高度,即顯示文字的行數*單個文字的高度,判斷其是否大于屏幕高度,如果大于,則改變Edit控件的屬性,使其具有WS_VSCROLL屬性;如果小于或等于,則改變Edit控件的屬性,使其不具有WS_VSCROLL屬性。

                     代碼示例:

                     int height = GetSystemMetrics(SM_CYFULLSCREEN); // 此處示屏幕高度,可自己設定
                     
                     HWND hEdit = GetDlgItem(hDlg, IDC_EDIT);
                     DWORD dwLineCount = (DWORD)::SendMessage(hEdit, EM_GETLINECOUNT, 0, 0L);
                     HDC hdc = GetDC(hDlg);
                     TEXTMETRIC metric;
                     GetTextMetrics(hdc, &metric);
                     ReleaseDC(hDlg, hdc); 

                      if (metric.tmHeight * dwLineCount <= height))
                     {
                           SetWindowLong(hEdit, GWL_STYLE, WS_VISIBLE | ES_MULTILINE | ES_READONLY);
                       }
                       else
                       {
                            SetWindowLong(hEdit,GWL_STYLE, WS_VISIBLE| WS_VSCROLL|   ES_MULTILINE  |ES_READONLY);
                       }

                       我在創建Edit控件的時候,一開始沒有設置WS_VSCROLL屬性,發現加上WS_VSCROLL屬性后,對于按鍵的上下響應有些問題。后來就反其道而行之,先讓其具有WS_VSCROLL屬性,然后再判斷其是否該顯示滾動條。

                        在Windows Mobile中涉及到橫豎屏切換的問題,比如說,在豎屏的時候沒有滾動條,到橫屏的時候又需要有滾動條,此時怎么辦?
                         在WM_SIZE中進行以上的屬性判斷,但是有一個問題需要注意:如果需要調整Edit控件的大小,需要在屬性判斷置后進行。

                          一點心得,大家可以試試哈!
                      

                    

            posted @ 2009-03-18 18:48 Sandy 閱讀(815) | 評論 (0)編輯 收藏

            Why is everyone in such a rush?
            Walk into any bookstore, and you'll see how to Teach Yourself Java in 7 Days alongside endless variations offering to teach Visual Basic, Windows, the Internet, and so on in a few days or hours. I did the following power search at Amazon.com:
            pubdate: after 1992 and title: days and
            (title: learn or title: teach yourself)
            and got back 248 hits. The first 78 were computer books (number 79 was Learn Bengali in 30 days). I replaced "days" with "hours" and got remarkably similar results: 253 more books, with 77 computer books followed by Teach Yourself Grammar and Style in 24 Hours at number 78. Out of the top 200 total, 96% were computer books.
            The conclusion is that either people are in a big rush to learn about computers, or that computers are somehow fabulously easier to learn than anything else. There are no books on how to learn Beethoven, or Quantum Physics, or even Dog Grooming in a few days.

            Let's analyze what a title like Learn Pascal in Three Days could mean:

            Learn: In 3 days you won't have time to write several significant programs, and learn from your successes and failures with them. You won't have time to work with an experienced programmer and understand what it is like to live in that environment. In short, you won't have time to learn much. So they can only be talking about a superficial familiarity, not a deep understanding. As Alexander Pope said, a little learning is a dangerous thing.

            Pascal: In 3 days you might be able to learn the syntax of Pascal (if you already knew a similar language), but you couldn't learn much about how to use the syntax. In short, if you were, say, a Basic programmer, you could learn to write programs in the style of Basic using Pascal syntax, but you couldn't learn what Pascal is actually good (and bad) for. So what's the point? Alan Perlis once said: "A language that doesn't affect the way you think about programming, is not worth knowing". One possible point is that you have to learn a tiny bit of Pascal (or more likely, something like Visual Basic or javascript) because you need to interface with an existing tool to accomplish a specific task. But then you're not learning how to program; you're learning to accomplish that task.

            in Three Days: Unfortunately, this is not enough, as the next section shows.
            Teach Yourself Programming in Ten Years
            Researchers (Hayes, Bloom) have shown it takes about ten years to develop expertise in any of a wide variety of areas, including chess playing, music composition, painting, piano playing, swimming, tennis, and research in neuropsychology and topology. There appear to be no real shortcuts: even Mozart, who was a musical prodigy at age 4, took 13 more years before he began to produce world-class music. In another genre, the Beatles seemed to burst onto the scene, appearing on the Ed Sullivan show in 1964. But they had been playing since 1957, and while they had mass appeal early on, their first great critical success, Sgt. Peppers, was released in 1967. Samuel Johnson thought it took longer than ten years: "Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price." And Chaucer complained "the lyf so short, the craft so long to lerne."
            Here's my recipe for programming success:

            Get interested in programming, and do some because it is fun. Make sure that it keeps being enough fun so that you will be willing to put in ten years.

            Talk to other programmers; read other programs. This is more important than any book or training course.

            Program. The best kind of learning is learning by doing. To put it more technically, "the maximal level of performance for individuals in a given domain is not attained automatically as a function of extended experience, but the level of performance can be increased even by highly experienced individuals as a result of deliberate efforts to improve." (p. 366) and "the most effective learning requires a well-defined task with an appropriate difficulty level for the particular individual, informative feedback, and opportunities for repetition and corrections of errors." (p. 20-21) The book Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life is an interesting reference for this viewpoint.

            If you want, put in four years at a college (or more at a graduate school). This will give you access to some jobs that require credentials, and it will give you a deeper understanding of the field, but if you don't enjoy school, you can (with some dedication) get similar experience on the job. In any case, book learning alone won't be enough. "Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter" says Eric Raymond, author of The New Hacker's Dictionary. One of the best programmers I ever hired had only a High School degree; he's produced a lot of great software, has his own news group, and through stock options is no doubt much richer than I'll ever be.

            Work on projects with other programmers. Be the best programmer on some projects; be the worst on some others. When you're the best, you get to test your abilities to lead a project, and to inspire others with your vision. When you're the worst, you learn what the masters do, and you learn what they don't like to do (because they make you do it for them).

            Work on projects after other programmers. Be involved in understanding a program written by someone else. See what it takes to understand and fix it when the original programmers are not around. Think about how to design your programs to make it easier for those who will maintain it after you.

            Learn at least a half dozen programming languages. Include one language that supports class abstractions (like Java or C++), one that supports functional abstraction (like Lisp or ML), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), one that supports coroutines (like Icon or Scheme), and one that supports parallelism (like Sisal).

            Remember that there is a "computer" in "computer science". Know how long it takes your computer to execute an instruction, fetch a word from memory (with and without a cache miss), read consecutive words from disk, and seek to a new location on disk. (Answers here.)

            Get involved in a language standardization effort. It could be the ANSI C++ committee, or it could be deciding if your local coding style will have 2 or 4 space indentation levels. Either way, you learn about what other people like in a language, how deeply they feel so, and perhaps even a little about why they feel so.

            Have the good sense to get off the language standardization effort as quickly as possible.
            With all that in mind, its questionable how far you can get just by book learning. Before my first child was born, I read all the How To books, and still felt like a clueless novice. 30 Months later, when my second child was due, did I go back to the books for a refresher? No. Instead, I relied on my personal experience, which turned out to be far more useful and reassuring to me than the thousands of pages written by experts.
            Fred Brooks, in his essay No Silver Bullets identified a three-part plan for finding great software designers:

            Systematically identify top designers as early as possible.

            Assign a career mentor to be responsible for the development of the prospect and carefully keep a career file.

            Provide opportunities for growing designers to interact and stimulate each other.

            This assumes that some people already have the qualities necessary for being a great designer; the job is to properly coax them along. Alan Perlis put it more succinctly: "Everyone can be taught to sculpt: Michelangelo would have had to be taught how not to. So it is with the great programmers".
            So go ahead and buy that Java book; you'll probably get some use out of it. But you won't change your life, or your real overall expertise as a programmer in 24 hours, days, or even months.


            References
            Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.

            Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.

            Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.

            Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.
            http://www.norvig.com/

            posted @ 2009-03-14 10:24 Sandy 閱讀(375) | 評論 (0)編輯 收藏
            昨天才開始認真讀《小P成長記》,發現真的很好看。

            學習這么久,才發現思考方法的轉變還是很重要的。我們往往缺少一位向老C一樣的好老師,能夠慢慢引導我們學習。

            機會難得,我們與小P一樣快快成長吧。

            讀到第一桶第九碗了,
            對里面的一些思想和方法很贊同,轉過來:

            思想:
            1. 以數據為中心思考問題的解決之道。
            2. 將對同類數據的操作放在相同的編譯單元中。
            3. 信息隱藏,而不是暴露,以將問題的規模控制在可理解的范圍。


            方法:
            1. 首先關注整體,而不是細節。
            2. 先考慮測試,更先于編碼。
            3. 先用偽代碼編程,以體現程序的意圖,再用具體代碼完善之。
            4. 迅速構建可編譯通過的,并且可執行的框架程序,使用測試代碼測試之。
            5. 將以上方法反復應用于子模塊,直到問題被解決。
            6. 在上下文環境中提取對其他模塊的需求。
            7. 先寫.h文件,后寫.c文件。
            8. 先快速實現一個可行的解法,再根據反饋信息優化之。

            如果大家也關心小P,就一同到那看看,鏈接地址:http://m.shnenglu.com/enderson/archive/2009/02/18/74215.html
            posted @ 2009-03-12 13:59 Sandy 閱讀(186) | 評論 (0)編輯 收藏
            今天在項目中遇到了一個問題:在smartphone上獲取進程地址不成功,而在pocket pc上卻可以獲取成功。研究了一下,這是跟smartphone上的安全機制有關,需要對我們的應用程序進行簽名。

            開發的時候利用數字簽名就可以解決。

            開發的時候,在Project->Property->Configuration Properties->Authenticode Signing中需要加載開發安全證書。

            這樣我們就可以很方便的獲得進程的路徑

            TCHAR szPath[MAX_PATH];
            HANDLE hProcess 
            = OpenProcess(0, FALSE, pe.th32ProcessID);
               GetModuleFileName((HMODULE)hProcess, szPath, 
            sizeof(szPath));
               CloseHandle(hProcess);

            如果hProcess為NULL的話,獲取的是當前進程的路徑。

            所以開發SmartPhone時需要注意這點。涉及特權API了,就需要簽名了。
            posted @ 2009-03-11 17:52 Sandy 閱讀(1753) | 評論 (2)編輯 收藏
             

            最近在工作中遇到一個比較怪異的現象,在某些省區與SP的短信交互存在問題,短信發送不出去。查了一下原因:SmsSendMessage參數設置的問題。

            Windows Mobile 5.0SDKHelloSMS例子中,發送短信的代碼是這樣寫的

            void SendSMS(BOOL bSendConfirmation, BOOL bUseDefaultSMSC, LPCTSTR lpszSMSC, LPCTSTR lpszRecipient, LPCTSTR lpszMessage)
            {
                SMS_HANDLE smshHandle;
                SMS_ADDRESS smsaSource;
                SMS_ADDRESS smsaDestination;
                TEXT_PROVIDER_SPECIFIC_DATA tpsd;
                SMS_MESSAGE_ID smsmidMessageID;

                
            // try to open an SMS Handle
                if(FAILED(SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, &smshHandle, NULL)))
                
            {
                    MessageBox(NULL,
                                (LPCTSTR)LoadString(ghInstance, IDS_ERROR_SMSOPEN, 
            00), 
                                (LPCTSTR)LoadString(ghInstance, IDS_CAPTION_ERROR, 
            00),
                                MB_OK 
            | MB_ICONERROR);
                    
            return;
                }


                
            // Create the source address
                if(!bUseDefaultSMSC)
                
            {
                    smsaSource.smsatAddressType 
            = SMSAT_INTERNATIONAL;
                    _tcsncpy(smsaSource.ptsAddress, lpszSMSC, SMS_MAX_ADDRESS_LENGTH);
                }


                
            // Create the destination address
                smsaDestination.smsatAddressType = SMSAT_INTERNATIONAL;
                _tcsncpy(smsaDestination.ptsAddress, lpszRecipient, SMS_MAX_ADDRESS_LENGTH);

                
            // Set up provider specific data
                memset(&tpsd, 0sizeof(tpsd));
                tpsd.dwMessageOptions 
            = bSendConfirmation ? PS_MESSAGE_OPTION_STATUSREPORT : PS_MESSAGE_OPTION_NONE;
                tpsd.psMessageClass 
            = PS_MESSAGE_CLASS1;
                tpsd.psReplaceOption 
            = PSRO_NONE;
                tpsd.dwHeaderDataSize 
            = 0;

                
            // Send the message, indicating success or failure
                if(SUCCEEDED(SmsSendMessage(smshHandle, ((bUseDefaultSMSC) ? NULL : &smsaSource), 
                                             
            &smsaDestination, NULL, (PBYTE) lpszMessage, 
                                             _tcslen(lpszMessage) 
            * sizeof(TCHAR), (PBYTE) &tpsd, 
                                             
            sizeof(TEXT_PROVIDER_SPECIFIC_DATA), SMSDE_OPTIMAL, 
                                             SMS_OPTION_DELIVERY_NONE, 
            &smsmidMessageID)))
                
            {
                    MessageBox(NULL,
                                (LPCTSTR)LoadString(ghInstance, IDS_SMSSENT, 
            00), 
                                (LPCTSTR)LoadString(ghInstance, IDS_CAPTION_SUCCESS, 
            00),
                                MB_OK);
                }

                
            else
                
            {
                    MessageBox(NULL,
                                (LPCTSTR)LoadString(ghInstance, IDS_ERROR_SMSSEND, 
            00), 
                                (LPCTSTR)LoadString(ghInstance, IDS_CAPTION_ERROR, 
            00),
                                MB_OK 
            | MB_ICONERROR);
                }


                
            // clean up
                VERIFY(SUCCEEDED(SmsClose(smshHandle)));
            }


            這段代碼在一般情況下是運行正確的,對于手機與手機的發送是不存在問題的,但是與SP的交互在某些省區就存在短信發送不出去的情況。

            為了更好的理解這段代碼,我們先來熟悉一下SmsSendMessage及各個參數。

            SmsSendMessage

            功能Use the SmsSendMessage function to create and send an Short Message Service (SMS) message.(創建和發送短信,但短信發送后并不保存到發件箱中)

            原型

            HRESULT SmsSendMessage (

            const SMS_HANDLE smshHandle, // 調用SmsOpen時獲得的短信句柄

            const SMS_ADDRESS * const psmsaSMSCAddress, //指向短信中心號碼的地址

            const SMS_ADDRESS * const psmsaDestinationAddress, // 發送的目的地址

            const SYSTEMTIME * const pstValidityPeriod, // 發送時間的有效期

            const BYTE * const pbData, // 信息的內容部分

            const DWORD dwDataSize,// 信息內容的長度

            const BYTE * const pbProviderSpecificData, //運營商的附加數據

            const DWORD dwProviderSpecificDataSize, // 附加數據的長度

            const SMS_DATA_ENCODING smsdeDataEncoding, // 短信編碼

            const DWORD dwOptions, // 其他選項

            SMS_MESSAGE_ID * psmsmidMessageID); // 用于得到系統回執的信息

            (具體介紹可查看http://msdn.microsoft.com/en-us/library/aa455068.aspx

            在實際應用中短信發送不出去,但是SmsSendMessage的返回值是S_OK值。在一些文章中有人這樣認為是短信編碼的問題造成的。

            如果編碼格式不對可能造成短信中心網關把短信給吞掉的情況,程序雖然調用成功,但是就是目標號碼收不到短信。函數參數中的后三個參數可以不用或設默認值都可以。

            起初我也是認為這個地方造成的,很是興奮。短信的回復內容恰為字母,我誤以為短信內容此時是7-BIT的短消息,短信網關把短信給吞掉了,造成目標號碼收不到短信。在練習中卻也陰差陽錯的成功了。很高興的把理由歸到了這個地方。并這樣總結:SmsSendMessage可以支持7-bitASCII碼的短消息,也支持16-bitunicode的短消息。但內容為ASCII的時候,短信編碼為 SMSDE_GSMSMSDE_OPTIMAL,當內容不全是ASCII的時候,短信編碼為SMSDE_GSMSMSDE_OPTIMAL。所以回復內容改為漢字即可。

            但是這樣對么?起初我認為我的解釋很合理.但是我卻發現我的一個參數與原來的程序不一樣.

            是我在嘗試中無意修改了一個參數,

            tpsd.psMessageClass = PS_MESSAGE_CLASS1;

            修改為了

            tpsd.psMessageClass = PS_MESSAGE_CLASSUNSPECIFIED;

            這是發送短信中的運營商的指定數據TEXT_PROVIDER_SPECIFIC_DATA,它的參數psMessageClass是指

            Text Short Message Service (SMS) messages with the appropriate flag can replace previously received notifications with a similar flag and originating address.

            它有以下五個值:

            PS_MESSAGE_CLASS0: The message should be displayed immediately but not stored. The MS shall send an acknowledgement to the service center when the message has successfully reached the MS. (被接受后立即顯示但不存儲(稱為閃信)。需要向SMSC發送確認信息。)

            PS_MESSAGE_CLASS1The message should be stored and an acknowledgement should be sent to the Service Center when it is stored.(接收后被存儲,一旦存儲,需要向SMSC發送確認信息。)

            PS_MESSAGE_CLASS2The message should be transferred to the SMS data field in the subscriber identity module (SIM) before an acknowledgement is sent to the Service Center.

            PS_MESSAGE_CLASS3When the message has successfully reached the destination and can be stored, an acknowledgement is sent to the Service Center.

            PS_MESSAGE_CLASSUNSPECIFIEDThe message Class is not set in the outgoing or incoming message. (對發出或收到的短信不進行設置)

             

            分析以上五個值,前四個值有一個共同的特點,都需要向SMSC發送確認。而最后一個值沒有設定。

            這個值的改動,解決了我所遇到的問題。但究其原因,我有些想不通為什么?
                但是在實際應用中,出現了
            tmail.exe的異常。不知道是這個值的變動帶來的問題,還是實際模塊中存在的問題。還需要繼續研究一下。

            如果大家有知道的,給些建議哈.

            posted @ 2009-03-10 14:14 Sandy 閱讀(6789) | 評論 (13)編輯 收藏

            前階段在調研mobile上的內存釋放問題,根據大家的建議嘗試了一些,但是沒有什么效果。
            于是跑到MSDN上去問相關的問題,得到了一些解答。

            As far as I know, I don't think there is other way to meet your requirement.  Since each mobile application has 32M memory limitation, we have to do the performance manually, like deleting object which is not used and allocating Large Memory Blocks in Large memory Area.

            For more information:
            Windows CE .NET Advanced Memory Management
            How the Windows Mobile 5.0 Shell Handles Low Memory Situations

            我看了一部分,在How the Windows Mobile 5.0 Shell Handles Low Memory Situations中提到,

             

             

            Hibernate

            This is the amount of memory the shell tries to keep free at all times. If the amount of free memory falls below this value then the low memory check routine will try to free up memory. It will do this by first sending WM_HIBERNATE to all valid applications. When an application receives this message it should try to free as many resources as possible. When the low memory check routine runs again and the amount of free memory is still below the hibernate level then the shell will try to close the least recently used (LRU) application by sending a WM_CLOSE message. If the low memory check routine runs yet again and the amount of free memory is still below the hibernate level then the shell will call TerminateProcess on the LRU application that it last sent the WM_CLOSE message to.


            我對這段話的理解是:當空閑內存小于Hibernate時,系統便會嘗試釋放內存。首先他會向所有有效的程序發送WM_HIBERNATE。應用程序收到該消息后,會盡量釋放資源來釋放內存。如果還低于這個值的話,將發送WM_CLOSE消息給最近很少使用的程序。如果還低于該值的,就強行關閉該程序了。

            這個方法似乎有效,但是用戶再起來程序的話,還是一樣的效果,并不是達到了什么釋放內存的效果。如何記錄最近很少使用的程序,這個是不是有什么方法獲得呢?

            就可以像系統提示的那樣,內存不足,請釋放一些內存。手工做一些比較好。

            也看了一些相近的程序的做法,似乎效果也沒有大家說的那么好。

            How the Windows Mobile 5.0 Shell Handles Low Memory Situations的最后,這樣寫的

            What can my Application do?

            The best thing your application can do when faced with a low memory situation is to play nicely with the rest of the device. 

            1、If your application receives a WM_HIBERNATE message free up any resources not absolutely required. 
            2、If you are planning on allocating a large amount of memory (or if a large allocation fails) you should call SHCloseApps, which will invoke the shell low memory check routine and will try to ensure that enough free memory exists. See below for an example:

            #define MIN_MEMORY_TO_RUN 2*1024*1024

            MEMORYSTATUS mst;

            mst.dwLength  
            = sizeof(MEMORYSTATUS);

            GlobalMemoryStatus(
            &mst);

            If (mst.dwAvailPhys 
            < MIN_MEMORY_TO_RUN)

            {

                
            // Try to free memory by asking Shell to shutdown apps

                
            if (!SHCloseApps(MIN_MEMORY_TO_RUN))

                
            {

                    
            // Handle the case where memory could not be freed

                    …


            專門查了一下SHCloseApps的用法
            原型:BOOL SHCloseApps(  DWORD dwMemSought);
            功能:
            This function tries to free up memory for an application. If necessary, the shell closes down other applications by sending dwMemSought);
            功能:
            This function tries to free up memory for an application. If necessary, the shell closes down other applications by sending WM_CLOSE messages.
            參數:dwMemSought Specifies, in bytes, the amount of memory to be freed.

            通過了解dwMemSought Specifies, in bytes, the amount of memory to be freed.

            通過了解SHCloseApps,我們就明白了上面那段代碼什么意思了。

            看來,內存釋放并不是真正意義上的內存整理,看來我有的地方誤解了!
            posted @ 2009-03-05 13:56 Sandy 閱讀(1290) | 評論 (2)編輯 收藏
            僅列出標題
            共15頁: First 6 7 8 9 10 11 12 13 14 Last 
            伊人色综合九久久天天蜜桃 | 久久久久免费视频| 久久久久久久综合日本亚洲| 久久99国产精品久久久| 精品久久人人妻人人做精品| 久久精品国产色蜜蜜麻豆| 久久人人添人人爽添人人片牛牛| 久久久久久综合网天天| 国产精品无码久久久久久| 国产成人无码精品久久久久免费 | 中文精品99久久国产| 精品久久人妻av中文字幕| 91久久精品视频| 久久久精品国产sm调教网站| 99久久中文字幕| 久久精品国产亚洲AV香蕉| 国产精品视频久久久| 热RE99久久精品国产66热| 精品人妻久久久久久888| 久久笫一福利免费导航| 99久久婷婷免费国产综合精品| 久久天天躁夜夜躁狠狠躁2022| 18岁日韩内射颜射午夜久久成人| 久久精品无码一区二区WWW | 国内精品伊人久久久影院| 一级做a爰片久久毛片16| 久久久久久毛片免费播放| www亚洲欲色成人久久精品| yy6080久久| 久久无码人妻精品一区二区三区| 国产99久久精品一区二区| 波多野结衣久久一区二区| 久久经典免费视频| 久久久精品人妻无码专区不卡| 久久久噜噜噜久久熟女AA片| 久久综合九色综合欧美就去吻| 日本道色综合久久影院| 久久99精品国产一区二区三区 | 99蜜桃臀久久久欧美精品网站| 亚洲欧美精品一区久久中文字幕| 久久性精品|