• <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>
            面對(duì)現(xiàn)實(shí),超越自己
            逆水行舟,不進(jìn)則退
            posts - 269,comments - 32,trackbacks - 0
                 在MFC中,向線程傳遞CString變量參數(shù)時(shí),很容易犯一個(gè)錯(cuò)誤,就是使用一個(gè)超出生存期的變量,在主函數(shù)中定義的CString變量是局部變量,當(dāng)主函數(shù)結(jié)束時(shí),這個(gè)CString變量就會(huì)被析構(gòu),而卻在另一個(gè)線程中繼續(xù)使用,參數(shù)傳遞就會(huì)出現(xiàn)問題。
                 解決此問題,可以在主函數(shù)中new一個(gè)CString,在線程結(jié)束時(shí)在delete一下釋放內(nèi)存。或者聲明一個(gè)全局變量,保證CString變量不會(huì)超出生存期,這樣傳遞進(jìn)線程的參數(shù)就可以正常使用了。
                 下面為示例代碼: 
             1 DWORD WINAPI test::ProcessNotifyThread(LPVOID pParam)
             2 {
             3 
             4     CString* sTest = (CString*)pParam;
             5     //AfxMessageBox(*sTest);
             6     delete sTest;
             7     return 0 ;
             8 }
             9 
            10 void test::OnBnClickedButton1()
            11 {
            12     // TODO: Add your control notification handler code here
            13      CString *sTest = new CString;
            14      *sTest = "hello";
            15      LPVOID lpvoid=sTest;
            16 
            17     CWinThread* pThread = AfxBeginThread((AFX_THREADPROC)test::ProcessNotifyThread, lpvoid);
            18 }
                 CString類是很好用,但在多線程時(shí)最好不要用CString,因?yàn)镸SDN明確說了,CString類是非線程安全的。
                 下面為摘抄的:

                 CString只保證類級(jí)的線程安全, 
                 要做到對(duì)象級(jí)別的線程安全,需要你自己進(jìn)行同步, 也就是說, 可以同時(shí)有N個(gè)線程在讀, 但是寫的時(shí)候,必須保證沒有任何線程"正在"讀和寫 才可以寫入.

            1 CString str; 
            2 
            3 CCriticalSection cs; 
            4 cs->Lock( ); 
            5 str+="abcdefg";.. 
            6 do anything you want 
            7 cs->Unlock( );


            線程傳遞char*

             1 DWORD WINAPI test::ProcessNotifyThread(LPVOID pParam)
             2 {
             3 
             4     char *pSectionName = (char *)lpvoid;
             5     CString sSectionName;
             6     sSectionName.Format("%s", pSectionName);     return 0 ;
             7  }
             8  
             9  void test::OnBnClickedButton1()
            10  {
            11      // TODO: Add your control notification handler code here
            12       CString str = _T("aaaa");
            13       const char *pSectionName = (LPCTSTR)str;     
            14       CWinThread* pThread = AfxBeginThread((AFX_THREADPROC)test::ProcessNotifyThread, (LPVOID)pSectionName);
            15  }

             

            posted on 2012-05-10 10:20 王海光 閱讀(2603) 評(píng)論(0)  編輯 收藏 引用 所屬分類: MFC
            91久久精品视频| 亚洲国产婷婷香蕉久久久久久| 精品久久久久一区二区三区| 18岁日韩内射颜射午夜久久成人| 色综合久久88色综合天天 | 88久久精品无码一区二区毛片 | 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 亚洲午夜久久久久妓女影院| 亚洲国产精品无码久久久久久曰| 久久www免费人成精品香蕉| 国产激情久久久久影院老熟女| 亚洲国产精品久久久久婷婷老年 | 国产精品永久久久久久久久久| 久久这里只有精品久久| 国产精品免费久久久久电影网| 国产高清美女一级a毛片久久w| 久久国产成人亚洲精品影院 | 亚洲国产成人精品久久久国产成人一区二区三区综 | 一级女性全黄久久生活片免费 | 亚洲午夜久久久影院伊人| 久久久国产亚洲精品| 久久精品国产亚洲av麻豆蜜芽| 7777精品久久久大香线蕉| 久久精品九九亚洲精品| 国产精品欧美久久久久天天影视| 亚洲国产成人久久精品99| 久久男人Av资源网站无码软件| 久久亚洲高清观看| 精品久久久久久久久免费影院| 久久香综合精品久久伊人| 99久久99久久精品国产片| 伊人 久久 精品| 久久精品免费观看| 精品久久久久久国产| 欧美精品一区二区精品久久| 少妇久久久久久被弄到高潮| 久久A级毛片免费观看| 亚洲精品99久久久久中文字幕 | 久久精品中文字幕大胸| 久久99精品国产99久久6男男| 亚洲人成无码网站久久99热国产 |