• <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>

            李帥的博客

            軟件開發(fā)愛好者

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              14 隨筆 :: 3 文章 :: 4 評(píng)論 :: 0 Trackbacks

            置頂隨筆 #

            B2C如今已經(jīng)風(fēng)靡互聯(lián)網(wǎng),可以說(shuō)這是社會(huì)的進(jìn)步,更是互聯(lián)網(wǎng)的進(jìn)步.先給大家解釋下何謂B2C,B2C中的B是Business,意思是企業(yè),2則是to的諧音,C是Customer,意思是消費(fèi)者,所以B2C是企業(yè)對(duì)消費(fèi)者的電子商務(wù)模式.特別是在當(dāng)今的時(shí)代,許多大學(xué)生都創(chuàng)業(yè),許多消費(fèi)者都需求物美價(jià)廉的商品,這消費(fèi)群體都是不斷一層層的博取中間差價(jià),最終才到達(dá)消費(fèi)者.所以互聯(lián)網(wǎng)里每天都會(huì)有許多的消費(fèi)者在尋找商品,這就需要運(yùn)用一些B2C的自身推廣技巧了.
              一、企業(yè)商品聯(lián)合推廣技巧:
              方法:尋找些稍微知名的B2C網(wǎng)站合作模式(目標(biāo)用戶相同,經(jīng)營(yíng)產(chǎn)品不同),把各站商品聯(lián)合運(yùn)作起來(lái)做促銷這可以做到想不到的結(jié)果.多多尋找一些可以取其長(zhǎng)的企業(yè)或商家,比如攝影書籍專賣和數(shù)碼相機(jī)專賣店合作,數(shù)碼類B2C與家庭消費(fèi)類網(wǎng)站的合作等。在彼此的頁(yè)面掛上對(duì)方的推薦商品;也可以推出套餐。
              如以下的一個(gè)活動(dòng):
              從XX年XX月XX日期至XX年XX月XX日,凡是只要在本站購(gòu)買任意一部筆記本電腦加50元送即可獲得【***購(gòu)物網(wǎng)】提供的蘋果牌移動(dòng)硬盤一個(gè)!!!!
              在此,找聯(lián)合促俏商品的網(wǎng)站可以是單向的,就是你尋找的購(gòu)物網(wǎng),讓它促銷你們的商品,而你不一定要上他們的商品。反之,如果是單向的,那么你要找的合作對(duì)象聯(lián)合推出的商品一定要它自己的商品的單價(jià)比你的高。
              學(xué)習(xí)點(diǎn):聯(lián)合促銷的目的是銷售商品、傳播口碑與吸引關(guān)注度(非流量)。只要有一個(gè)目的做成即可,當(dāng)然這看個(gè)人,如果可以兩樣都得手,你一定會(huì)有所收獲.
              二、贈(zèng)品活動(dòng)
              方法:此類活動(dòng)  注意點(diǎn):與第三方網(wǎng)站的接口與數(shù)據(jù)及時(shí)對(duì)接更新是很重要的。
              四、注冊(cè)有獎(jiǎng)
              作法:注冊(cè)就有獎(jiǎng),形式可以是實(shí)物也可以是代金券,可以設(shè)置等級(jí),更可以設(shè)置大獎(jiǎng)。如果是代金券,可以直接在用戶注冊(cè)后打入用戶的帳戶中,用戶可以直接在消費(fèi)時(shí)使用。
              注意點(diǎn):有人獲得了大獎(jiǎng)后一定要大力宣傳,造勢(shì)并炒作。
              五、論壇推送
              作法:相關(guān)性的論壇里發(fā)公益性的貼子并維護(hù)不使其下沉,也可發(fā)某一我們想重點(diǎn)推的商品的公益性信息,這對(duì)口碑傳播與關(guān)住度的提升是很好很快捷的方法。
              注意點(diǎn):
              1.一定要巧妙體現(xiàn)你的網(wǎng)站及品牌。
              2.貼子的標(biāo)題一定要有吸引力。
              3.注意回貼,保持貼子的活力與壽命,并使其出現(xiàn)在第一頁(yè)。
              4. 一個(gè)貼子選20個(gè)左右的論壇社就發(fā)送并維護(hù)就可以了。
              六、專題推廣
              作法:專門就某產(chǎn)品某品牌收集大量地文章,可以在自己的站上的資訊里天天更新十篇左右;同時(shí),可以在選和訊、techweb等3個(gè)之內(nèi)的博客開這樣的專題博客。比如“如何選購(gòu)數(shù)碼相機(jī)”博客。
              注意點(diǎn):
              1.與論壇推送相反,這里要求文章數(shù)量多,發(fā)送的平臺(tái)倒可以少點(diǎn),只放在自己網(wǎng)站上也是可以的。
              2.如果從別的網(wǎng)站摘錄的文章,一定要改改頭換找面。
              3.文章中要加入自己網(wǎng)站標(biāo)識(shí)的字眼
              4.文章要多重復(fù)需要突現(xiàn)的商品或品牌名字。
              七、主題活動(dòng)
              作法:我方單獨(dú)或聯(lián)合或贊助第三方進(jìn)行活動(dòng),比如數(shù)碼網(wǎng)站可以搞“地球村,我們的生活空間。-大學(xué)生攝影展”,以吸引人氣,傳遞品牌為主。也可以起到促銷的目的。
              注意點(diǎn):
              1. 活動(dòng)主題及延展一定要與所經(jīng)營(yíng)的產(chǎn)品相關(guān)。
              2.活動(dòng)的人群要與目標(biāo)客戶相同。比如數(shù)碼網(wǎng)站如果搞一個(gè)小學(xué)生作文大賽就失去了意義,當(dāng)然也起不到效果。
              八、參與活動(dòng)
              作法:參與到第三方舉辦的活動(dòng)中去,包括某網(wǎng)站的活動(dòng),某些會(huì)議,某些會(huì)展等等。形式上可以是活動(dòng)贊助單位、獎(jiǎng)金提供商、報(bào)名網(wǎng)站等等。
              注意點(diǎn):
              1. 對(duì)第三方舉辦的活動(dòng)一定要注意活動(dòng)的對(duì)象與我們的目標(biāo)客戶群體是否附合(一再重復(fù)這點(diǎn),是因?yàn)殡娮由虅?wù)網(wǎng)站不可以作大而空的炒作,一切動(dòng)作都是為增加用戶,進(jìn)而增加銷量,這與別的網(wǎng)站,特別是那些求流量的網(wǎng)站根本上是不一樣)
              2. 一定要注意費(fèi)用,爭(zhēng)取不花錢或花盡可能少的錢起到最大的影響
              3. 如果能與會(huì),最好也參與進(jìn)去。


            2012年2月23日 #

                 摘要:   閱讀全文
            posted @ 2012-02-23 13:04 李帥 閱讀(412) | 評(píng)論 (0)編輯 收藏

            2010年12月15日 #

            B2C如今已經(jīng)風(fēng)靡互聯(lián)網(wǎng),可以說(shuō)這是社會(huì)的進(jìn)步,更是互聯(lián)網(wǎng)的進(jìn)步.先給大家解釋下何謂B2C,B2C中的B是Business,意思是企業(yè),2則是to的諧音,C是Customer,意思是消費(fèi)者,所以B2C是企業(yè)對(duì)消費(fèi)者的電子商務(wù)模式.特別是在當(dāng)今的時(shí)代,許多大學(xué)生都創(chuàng)業(yè),許多消費(fèi)者都需求物美價(jià)廉的商品,這消費(fèi)群體都是不斷一層層的博取中間差價(jià),最終才到達(dá)消費(fèi)者.所以互聯(lián)網(wǎng)里每天都會(huì)有許多的消費(fèi)者在尋找商品,這就需要運(yùn)用一些B2C的自身推廣技巧了.
              一、企業(yè)商品聯(lián)合推廣技巧:
              方法:尋找些稍微知名的B2C網(wǎng)站合作模式(目標(biāo)用戶相同,經(jīng)營(yíng)產(chǎn)品不同),把各站商品聯(lián)合運(yùn)作起來(lái)做促銷這可以做到想不到的結(jié)果.多多尋找一些可以取其長(zhǎng)的企業(yè)或商家,比如攝影書籍專賣和數(shù)碼相機(jī)專賣店合作,數(shù)碼類B2C與家庭消費(fèi)類網(wǎng)站的合作等。在彼此的頁(yè)面掛上對(duì)方的推薦商品;也可以推出套餐。
              如以下的一個(gè)活動(dòng):
              從XX年XX月XX日期至XX年XX月XX日,凡是只要在本站購(gòu)買任意一部筆記本電腦加50元送即可獲得【***購(gòu)物網(wǎng)】提供的蘋果牌移動(dòng)硬盤一個(gè)!!!!
              在此,找聯(lián)合促俏商品的網(wǎng)站可以是單向的,就是你尋找的購(gòu)物網(wǎng),讓它促銷你們的商品,而你不一定要上他們的商品。反之,如果是單向的,那么你要找的合作對(duì)象聯(lián)合推出的商品一定要它自己的商品的單價(jià)比你的高。
              學(xué)習(xí)點(diǎn):聯(lián)合促銷的目的是銷售商品、傳播口碑與吸引關(guān)注度(非流量)。只要有一個(gè)目的做成即可,當(dāng)然這看個(gè)人,如果可以兩樣都得手,你一定會(huì)有所收獲.
              二、贈(zèng)品活動(dòng)
              方法:此類活動(dòng)  注意點(diǎn):與第三方網(wǎng)站的接口與數(shù)據(jù)及時(shí)對(duì)接更新是很重要的。
              四、注冊(cè)有獎(jiǎng)
              作法:注冊(cè)就有獎(jiǎng),形式可以是實(shí)物也可以是代金券,可以設(shè)置等級(jí),更可以設(shè)置大獎(jiǎng)。如果是代金券,可以直接在用戶注冊(cè)后打入用戶的帳戶中,用戶可以直接在消費(fèi)時(shí)使用。
              注意點(diǎn):有人獲得了大獎(jiǎng)后一定要大力宣傳,造勢(shì)并炒作。
              五、論壇推送
              作法:相關(guān)性的論壇里發(fā)公益性的貼子并維護(hù)不使其下沉,也可發(fā)某一我們想重點(diǎn)推的商品的公益性信息,這對(duì)口碑傳播與關(guān)住度的提升是很好很快捷的方法。
              注意點(diǎn):
              1.一定要巧妙體現(xiàn)你的網(wǎng)站及品牌。
              2.貼子的標(biāo)題一定要有吸引力。
              3.注意回貼,保持貼子的活力與壽命,并使其出現(xiàn)在第一頁(yè)。
              4. 一個(gè)貼子選20個(gè)左右的論壇社就發(fā)送并維護(hù)就可以了。
              六、專題推廣
              作法:專門就某產(chǎn)品某品牌收集大量地文章,可以在自己的站上的資訊里天天更新十篇左右;同時(shí),可以在選和訊、techweb等3個(gè)之內(nèi)的博客開這樣的專題博客。比如“如何選購(gòu)數(shù)碼相機(jī)”博客。
              注意點(diǎn):
              1.與論壇推送相反,這里要求文章數(shù)量多,發(fā)送的平臺(tái)倒可以少點(diǎn),只放在自己網(wǎng)站上也是可以的。
              2.如果從別的網(wǎng)站摘錄的文章,一定要改改頭換找面。
              3.文章中要加入自己網(wǎng)站標(biāo)識(shí)的字眼
              4.文章要多重復(fù)需要突現(xiàn)的商品或品牌名字。
              七、主題活動(dòng)
              作法:我方單獨(dú)或聯(lián)合或贊助第三方進(jìn)行活動(dòng),比如數(shù)碼網(wǎng)站可以搞“地球村,我們的生活空間。-大學(xué)生攝影展”,以吸引人氣,傳遞品牌為主。也可以起到促銷的目的。
              注意點(diǎn):
              1. 活動(dòng)主題及延展一定要與所經(jīng)營(yíng)的產(chǎn)品相關(guān)。
              2.活動(dòng)的人群要與目標(biāo)客戶相同。比如數(shù)碼網(wǎng)站如果搞一個(gè)小學(xué)生作文大賽就失去了意義,當(dāng)然也起不到效果。
              八、參與活動(dòng)
              作法:參與到第三方舉辦的活動(dòng)中去,包括某網(wǎng)站的活動(dòng),某些會(huì)議,某些會(huì)展等等。形式上可以是活動(dòng)贊助單位、獎(jiǎng)金提供商、報(bào)名網(wǎng)站等等。
              注意點(diǎn):
              1. 對(duì)第三方舉辦的活動(dòng)一定要注意活動(dòng)的對(duì)象與我們的目標(biāo)客戶群體是否附合(一再重復(fù)這點(diǎn),是因?yàn)殡娮由虅?wù)網(wǎng)站不可以作大而空的炒作,一切動(dòng)作都是為增加用戶,進(jìn)而增加銷量,這與別的網(wǎng)站,特別是那些求流量的網(wǎng)站根本上是不一樣)
              2. 一定要注意費(fèi)用,爭(zhēng)取不花錢或花盡可能少的錢起到最大的影響
              3. 如果能與會(huì),最好也參與進(jìn)去。


            2010年6月14日 #

            C# 寫入excel及讀取Excel實(shí)例看到論壇里面不斷有人提問(wèn)關(guān)于讀取excel和導(dǎo)入excel的相關(guān)問(wèn)題。閑暇時(shí)間將我所知道的對(duì)excel的操作加以總結(jié),現(xiàn)在共享大家,希望給大家能夠給大家?guī)Я艘欢ǖ膸椭?br>另外我們還要注意一些簡(jiǎn)單的問(wèn)題1.excel文件只能存儲(chǔ)65535行數(shù)據(jù),如果你的數(shù)據(jù)大于65535行,那么就需要將excel分割存放了。2.關(guān)于亂碼,這主要是字符設(shè)置問(wèn)題。

            1.加載Excel(讀取excel內(nèi)容)是返回值是一個(gè)DataSet

                    //加載Excel
                    public static DataSet LoadDataFromExcel(string filePath)
                    {
                        try
                        {
                            string strConn;
                            strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
                            OleDbConnection OleConn = new OleDbConnection(strConn);
                            OleConn.Open();
                            String sql = "SELECT * FROM  [Sheet1$]";//可是更改Sheet名稱,比如sheet2,等等

                            OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
                            DataSet OleDsExcle = new DataSet();
                            OleDaExcel.Fill(OleDsExcle, "Sheet1");
                            OleConn.Close();
                            return OleDsExcle;
                        }
                        catch (Exception err)
                        {
                            MessageBox.Show("數(shù)據(jù)綁定Excel失敗!失敗原因:" + err.Message, "提示信息",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return null;
                        }
                    }
            2.寫入Excel內(nèi)容,參數(shù):excelTable是要導(dǎo)入excel的一個(gè)table表 < type="text/JavaScript"> alimama_pid="mm_10249644_1605763_5027492"; alimama_type="f"; alimama_sizecode ="tl_1x5_8"; alimama_fontsize=12; alimama_bordercolor="FFFFFF"; alimama_bgcolor="FFFFFF"; alimama_titlecolor="0000FF"; alimama_underline=0; alimama_height=22; alimama_width=0; < src="

                    public static bool SaveDataTableToExcel(System.Data.DataTable excelTable, string filePath)
                    {
                        Microsoft.Office.Interop.Excel.Application app =
                            new Microsoft.Office.Interop.Excel.ApplicationClass();
                        try
                        {
                            app.Visible = false;
                            Workbook wBook = app.Workbooks.Add(true);
                            Worksheet wSheet = wBook.Worksheets[1] as Worksheet;
                            if (excelTable.Rows.Count > 0)
                            {
                                int row = 0;
                                row = excelTable.Rows.Count;
                                int col = excelTable.Columns.Count;
                                for (int i = 0; i < row; i++)
                                {
                                    for (int j = 0; j < col; j++)
                                    {
                                        string str = excelTable.Rows[i][j].ToString();
                                        wSheet.Cells[i + 2, j + 1] = str;
                                    }
                                }
                            }

                            int size = excelTable.Columns.Count;
                            for (int i = 0; i < size; i++)
                            {
                                wSheet.Cells[1, 1 + i] = excelTable.Columns[i].ColumnName;
                            }
                            //設(shè)置禁止彈出保存和覆蓋的詢問(wèn)提示框 C# 寫入excel及讀取Excel實(shí)例
                            app.DisplayAlerts = false;
                            app.AlertBeforeOverwriting = false;
                            //保存工作簿 < type="text/JavaScript"> alimama_pid="mm_10249644_1605763_5027492"; alimama_type="f"; alimama_sizecode ="tl_1x5_8"; alimama_fontsize=12; alimama_bordercolor="FFFFFF"; alimama_bgcolor="FFFFFF"; alimama_titlecolor="0000FF"; alimama_underline=0; alimama_height=22; alimama_width=0; < src="
                            wBook.Save();
                            //保存excel文件
                            app.Save(filePath);
                            app.SaveWorkspace(filePath);
                            app.Quit();
                            app = null;
                            return true;
                        }
                        catch (Exception err)
                        {
                            MessageBox.Show("導(dǎo)出Excel出錯(cuò)!錯(cuò)誤原因:" + err.Message, "提示信息",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return false;
                        }
                        finally
                        {
                        }
                    }


             

            歡迎收藏本文 一起讀網(wǎng) 【C# 寫入excel及讀取Excel實(shí)例 http://www.1qidu.com/?action-viewnews-itemid-31870
            一起讀網(wǎng)參考地址:http://www.1qidu.com/?action-viewnews-itemid-31870

            posted @ 2010-06-14 23:46 李帥 閱讀(2232) | 評(píng)論 (0)編輯 收藏

            2010年6月9日 #

            在Pentium以上的CPU中,提供了一條機(jī)器指令RDTSC(Read Time Stamp Counter)來(lái)讀取這個(gè)時(shí)間戳的數(shù)字,并將其保存在EDX:EAX寄存器對(duì)中。由于EDX:EAX寄存器對(duì)恰好是Win32平臺(tái)下C++語(yǔ)言保存函數(shù)返回值的寄存器,所以我們可以把這條指令看成是一個(gè)普通的函數(shù)調(diào)用。vc2003像這樣:
            inline unsigned __int64 GetTimeStampCount()
            {
            __asm RDTSC
            }
            對(duì)于vc6或者其他編譯器可能不行,因?yàn)镽DTSC不被C++的內(nèi)嵌匯編器直接支持,所以我們要用_emit偽指令直接嵌入該指令的機(jī)器碼形式0X0F、0X31,如下:
            inline unsigned __int64 GetTimeStampCount()
            {
            __asm _emit 0x0F
            __asm _emit 0x31
            }

             

             

            對(duì)關(guān)注性能的程序開發(fā)人員而言,一個(gè)好的計(jì)時(shí)部件既是益友,也是良師。計(jì)時(shí)器既可以作為程序組件幫助程序員精確的控制程序進(jìn)程,又是一件有力的調(diào)試武器,在有經(jīng)驗(yàn)的程序員手里可以盡快的確定程序的性能瓶頸,或者對(duì)不同的算法作出有說(shuō)服力的性能比較。  
               
                在Windows平臺(tái)下,常用的計(jì)時(shí)器有兩種,一種是timeGetTime多媒體計(jì)時(shí)器,它可以提供毫秒級(jí)的計(jì)時(shí)。但這個(gè)精度對(duì)很多應(yīng)用場(chǎng)合而言還是太粗糙了。另一種是QueryPerformanceCount計(jì)數(shù)器,隨系統(tǒng)的不同可以提供微秒級(jí)的計(jì)數(shù)。對(duì)于實(shí)時(shí)圖形處理、多媒體數(shù)據(jù)流處理、或者實(shí)時(shí)系統(tǒng)構(gòu)造的程序員,善用QueryPerformanceCount/QueryPerformanceFrequency是一項(xiàng)基本功。  
               
                本文要介紹的,是另一種直接利用Pentium   CPU內(nèi)部時(shí)間戳進(jìn)行計(jì)時(shí)的高精度計(jì)時(shí)手段。以下討論主要得益于《Windows圖形編程》一書,第   15頁(yè)-17頁(yè),有興趣的讀者可以直接參考該書。關(guān)于RDTSC指令的詳細(xì)討論,可以參考Intel產(chǎn)品手冊(cè)。本文僅僅作拋磚之用。  
                在   Intel   Pentium以上級(jí)別的CPU中,有一個(gè)稱為“時(shí)間戳(Time   Stamp)”的部件,它以64位無(wú)符號(hào)整型數(shù)的格式,記錄了自CPU上電以來(lái)所經(jīng)過(guò)的時(shí)鐘周期數(shù)。由于目前的CPU主頻都非常高,因此這個(gè)部件可以達(dá)到納秒級(jí)的計(jì)時(shí)精度。這個(gè)精確性是上述兩種方法所無(wú)法比擬的。  
               
                在Pentium以上的CPU中,提供了一條機(jī)器指令RDTSC(Read   Time   Stamp   Counter)來(lái)讀取這個(gè)時(shí)間戳的數(shù)字,并將其保存在EDX:EAX寄存器對(duì)中。由于EDX:EAX寄存器對(duì)恰好是Win32平臺(tái)下C++語(yǔ)言保存函數(shù)返回值的寄存器,所以我們可以把這條指令看成是一個(gè)普通的函數(shù)調(diào)用。像這樣:  
               
              inline   unsigned   __int64   GetCycleCount()  
              {  
                __asm   RDTSC  
              }  
               
              但是不行,因?yàn)镽DTSC不被C++的內(nèi)嵌匯編器直接支持,所以我們要用_emit偽指令直接嵌入該指令的機(jī)器碼形式0X0F、0X31,如下:  
               
              inline   unsigned   __int64   GetCycleCount()  
              {  
                __asm   _emit   0x0F  
                __asm   _emit   0x31  
              }  
               
              以后在需要計(jì)數(shù)器的場(chǎng)合,可以像使用普通的Win32   API一樣,調(diào)用兩次GetCycleCount函數(shù),比較兩個(gè)返回值的差,像這樣:  
               
              unsigned   long   t;  
              t   =   (unsigned   long)GetCycleCount();  
              //Do   Something   time-intensive   ...  
              t   -=   (unsigned   long)GetCycleCount();  
               
                《Windows圖形編程》第15頁(yè)編寫了一個(gè)類,把這個(gè)計(jì)數(shù)器封裝起來(lái)。有興趣的讀者可以去參考那個(gè)類的代碼。作者為了更精確的定時(shí),做了一點(diǎn)小小的改進(jìn),把執(zhí)行RDTSC指令的時(shí)間,通過(guò)連續(xù)兩次調(diào)用GetCycleCount函數(shù)計(jì)算出來(lái)并保存了起來(lái),以后每次計(jì)時(shí)結(jié)束后,都從實(shí)際得到的計(jì)數(shù)中減掉這一小段時(shí)間,以得到更準(zhǔn)確的計(jì)時(shí)數(shù)字。但我個(gè)人覺得這一點(diǎn)點(diǎn)改進(jìn)意義不大。在我的機(jī)器上實(shí)測(cè),這條指令大概花掉了幾十到100多個(gè)周期,在   Celeron   800MHz的機(jī)器上,這不過(guò)是十分之一微秒的時(shí)間。對(duì)大多數(shù)應(yīng)用來(lái)說(shuō),這點(diǎn)時(shí)間完全可以忽略不計(jì);而對(duì)那些確實(shí)要精確到納秒數(shù)量級(jí)的應(yīng)用來(lái)說(shuō),這個(gè)補(bǔ)償也過(guò)于粗糙了。  
               
              這個(gè)方法的優(yōu)點(diǎn)是:  
               
              1.高精度。可以直接達(dá)到納秒級(jí)的計(jì)時(shí)精度(在1GHz的CPU上每個(gè)時(shí)鐘周期就是一納秒),這是其他計(jì)時(shí)方法所難以企及的。  
               
              2.   成本低。timeGetTime   函數(shù)需要鏈接多媒體庫(kù)winmm.lib,QueryPerformance*   函數(shù)根據(jù)MSDN的說(shuō)明,需要硬件的支持(雖然我還沒有見過(guò)不支持的機(jī)器)和KERNEL庫(kù)的支持,所以二者都只能在Windows平臺(tái)下使用(關(guān)于DOS平臺(tái)下的高精度計(jì)時(shí)問(wèn)題,可以參考《圖形程序開發(fā)人員指南》,里面有關(guān)于控制定時(shí)器8253的詳細(xì)說(shuō)明)。但RDTSC指令是一條CPU指令,凡是i386平臺(tái)下Pentium以上的機(jī)器均支持,甚至沒有平臺(tái)的限制(我相信i386版本UNIX和Linux下這個(gè)方法同樣適用,但沒有條件試驗(yàn)),而且函數(shù)調(diào)用的開銷是最小的。  
               
              3.   具有和CPU主頻直接對(duì)應(yīng)的速率關(guān)系。一個(gè)計(jì)數(shù)相當(dāng)于1/(CPU主頻Hz數(shù))秒,這樣只要知道了CPU的主頻,可以直接計(jì)算出時(shí)間。這和   QueryPerformanceCount不同,后者需要通過(guò)QueryPerformanceFrequency獲取當(dāng)前計(jì)數(shù)器每秒的計(jì)數(shù)次數(shù)才能換算成時(shí)間。  
               
              這個(gè)方法的缺點(diǎn)是:  
               
              1.現(xiàn)有的C/C++編譯器多數(shù)不直接支持使用RDTSC指令,需要用直接嵌入機(jī)器碼的方式編程,比較麻煩。  
               
              2.數(shù)據(jù)抖動(dòng)比較厲害。其實(shí)對(duì)任何計(jì)量手段而言,精度和穩(wěn)定性永遠(yuǎn)是一對(duì)矛盾。如果用低精度的timeGetTime來(lái)計(jì)時(shí),基本上每次計(jì)時(shí)的結(jié)果都是相同的;而RDTSC指令每次結(jié)果都不一樣,經(jīng)常有幾百甚至上千的差距。這是這種方法高精度本身固有的矛盾。  
               
              關(guān)于這個(gè)方法計(jì)時(shí)的最大長(zhǎng)度,我們可以簡(jiǎn)單的用下列公式計(jì)算:  
               
              自CPU上電以來(lái)的秒數(shù)   =   RDTSC讀出的周期數(shù)   /   CPU主頻速率(Hz)  
               
              64位無(wú)符號(hào)整數(shù)所能表達(dá)的最大數(shù)字是1.8×10^19,在我的Celeron   800上可以計(jì)時(shí)大約700年(書中說(shuō)可以在200MHz的Pentium上計(jì)時(shí)117年,這個(gè)數(shù)字不知道是怎么得出來(lái)的,與我的計(jì)算有出入)。無(wú)論如何,我們大可不必關(guān)心溢出的問(wèn)題。  
               
              下面是幾個(gè)小例子,簡(jiǎn)要比較了三種計(jì)時(shí)方法的用法與精度  
               
              //Timer1.cpp   使用了RDTSC指令的Timer類//KTimer類的定義可以參見《Windows圖形編程》P15  
              //編譯行:CL   Timer1.cpp   /link   USER32.lib  
              #include   &ltstdio.h>  
              #include   "KTimer.h"  
              main()  
              {  
                unsigned   t;  
                KTimer   timer;  
                timer.Start();  
                Sleep(1000);  
                t   =   timer.Stop();  
                printf("Lasting   Time:   %d\n",t);  
              }  
               
              //Timer2.cpp   使用了timeGetTime函數(shù)  
              //需包含&ltmmsys.h>,但由于Windows頭文件錯(cuò)綜復(fù)雜的關(guān)系  
              //簡(jiǎn)單包含&ltwindows.h>比較偷懶:)  
              //編譯行:CL   timer2.cpp   /link   winmm.lib    
              #include   &ltwindows.h>  
              #include   &ltstdio.h>  
               
              main()  
              {  
                DWORD   t1,   t2;  
                t1   =   timeGetTime();  
                Sleep(1000);  
                t2   =   timeGetTime();  
                printf("Begin   Time:   %u\n",   t1);  
                printf("End   Time:   %u\n",   t2);  
                printf("Lasting   Time:   %u\n",(t2-t1));  
              }  
               
              //Timer3.cpp   使用了QueryPerformanceCounter函數(shù)  
              //編譯行:CL   timer3.cpp   /link   KERNEl32.lib  
              #include   &ltwindows.h>  
              #include   &ltstdio.h>  
               
              main()  
              {  
                LARGE_INTEGER   t1,   t2,   tc;  
                QueryPerformanceFrequency(&tc);  
                printf("Frequency:   %u\n",   tc.QuadPart);  
                QueryPerformanceCounter(&t1);  
                Sleep(1000);  
                QueryPerformanceCounter(&t2);  
                printf("Begin   Time:   %u\n",   t1.QuadPart);  
                printf("End   Time:   %u\n",   t2.QuadPart);  
                printf("Lasting   Time:   %u\n",(   t2.QuadPart-   t1.QuadPart));  
              }  
               
              ////////////////////////////////////////////////  
              //以上三個(gè)示例程序都是測(cè)試1秒鐘休眠所耗費(fèi)的時(shí)間  
              file://測(cè)/試環(huán)境:Celeron   800MHz   /   256M   SDRAM      
              //                     Windows   2000   Professional   SP2  
              //                     Microsoft   Visual   C++   6.0   SP5  
              ////////////////////////////////////////////////  
               
              以下是Timer1的運(yùn)行結(jié)果,使用的是高精度的RDTSC指令  
              Lasting   Time:   804586872  
               
              以下是Timer2的運(yùn)行結(jié)果,使用的是最粗糙的timeGetTime   API  
              Begin   Time:   20254254  
              End   Time:   20255255  
              Lasting   Time:   1001  
               
              以下是Timer3的運(yùn)行結(jié)果,使用的是QueryPerformanceCount   API  
              Frequency:   3579545  
              Begin   Time:   3804729124  
              End   Time:   3808298836  
              Lasting   Time:   3569712  


            歡迎收藏本文 一起讀網(wǎng) 【獲取CPU時(shí)間戳代碼 使用CPU時(shí)間戳進(jìn)行高精度計(jì)時(shí) http://www.1qidu.com/?action-viewnews-itemid-16841
            一起讀網(wǎng)參考地址:http://www.1qidu.com/?action-viewnews-itemid-16841

            posted @ 2010-06-09 14:05 李帥 閱讀(4030) | 評(píng)論 (4)編輯 收藏

            2008年11月19日 #

            CDC::GetDeviceCaps可用予獲取打印機(jī)DC的不同參數(shù)

            這樣就可以在開發(fā)打印報(bào)表的時(shí)候根據(jù)打印機(jī)設(shè)置參數(shù)來(lái)自動(dòng)獲取了。

            如果你開發(fā)的報(bào)表出現(xiàn)隨著不同打印機(jī)而出現(xiàn)不同效果可以使用這個(gè)函數(shù)。
            posted @ 2008-11-19 09:52 李帥 閱讀(1320) | 評(píng)論 (0)編輯 收藏

            2008年11月15日 #

            #include <windows.h>
            #include <iostream.h>

            DWORD WINAPI Fun1Proc(LPVOID lpParameter);
            DWORD WINAPI Fun2Proc(LPVOID lpParameter);

            int index=0;
            int tickets=100;
            HANDLE hMutex;
            void main()
            {

                HANDLE hThread1,hThread2;
                hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
                hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
                CloseHandle(hThread1);
                CloseHandle(hThread2);
               
                hMutex=CreateMutex(NULL,FALSE,NULL);
                //TRUE代表主線程擁有互斥對(duì)象 但是主線程沒有釋放該對(duì)象  互斥對(duì)象誰(shuí)擁有 誰(shuí)釋放
                //FLASE代表當(dāng)前沒有線程擁有這個(gè)互斥對(duì)象

                Sleep(4000);

            }

            DWORD WINAPI Fun1Proc(LPVOID lpParameter)
            {
                while (true)
                {
                    WaitForSingleObject(hMutex,INFINITE);
                    if (tickets>0)
                    {
                        cout<<"t1: "<<tickets--<<endl;
                   
                    }
                    else
                    {
                        break;
                    }
                    ReleaseMutex(hMutex);
                }

                return 0;
            }

            DWORD WINAPI Fun2Proc(LPVOID lpParameter)
            {
                while (true)
                {
                    WaitForSingleObject(hMutex,INFINITE);
                    if (tickets>0)
                    {
                        cout<<"t2: "<<tickets--<<endl;
                    }
                    else
                    {
                        break;
                    }
                    ReleaseMutex(hMutex);
                }

                return 0;
            }
            此信息來(lái)自〖軟工吧論壇http://www.gcs8.cn
            查看原網(wǎng)址:http://www.gcs8.cn/htm_data/2/0811/15807.html

            posted @ 2008-11-15 17:04 李帥 閱讀(2372) | 評(píng)論 (0)編輯 收藏

            2008年11月11日 #

            #include <windows.h>
            #include<windowsx.h>

            BOOL Cls_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct)
            {
                MessageBox(NULL,"使用消息分流器創(chuàng)建窗口成功","ddd",MB_OK); 
                return 1;
            }

            LRESULT CALLBACK WinProc(HWND hwnd,
                                     UINT msg,
                                     WPARAM wparam,
                                     LPARAM lparam)
            {
                switch(msg)
                {
                    case WM_CREATE:
                        return HANDLE_WM_CREATE(hwnd, wparam, lparam, Cls_OnCreate);
                    case WM_CLOSE:
                        DestroyWindow(hwnd);
                        break;
                    case WM_DESTROY:
                        PostQuitMessage(0);
                        break;
                    default:
                        return DefWindowProc(hwnd, msg, wparam, lparam);
                }

                //這里可以輸入響應(yīng)消息的代碼
                return 0;
            }


            int WINAPI WinMain(HINSTANCE hinstance,
                               HINSTANCE hprevinstance,
                               LPSTR lpcmdline,
                               int ncmdshow)
            {
                HWND hWnd;
                MSG msg;     
                WNDCLASSEX wndclass; 
                wndclass.cbSize=sizeof(WNDCLASSEX);
                wndclass.style=CS_HREDRAW | CS_VREDRAW;
                wndclass.lpfnWndProc=(WNDPROC) WinProc;
                wndclass.cbClsExtra=0;
                wndclass.cbWndExtra=0;
                wndclass.hInstance = hinstance;   
                wndclass.hIcon = LoadIcon(NULL,IDI_ERROR);
                wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
                wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
                wndclass.lpszMenuName = NULL;
                wndclass.lpszClassName = "WINCLASS1";
                wndclass.hIconSm = LoadIcon(wndclass.hInstance, (LPCTSTR)IDI_ERROR);
                wndclass.lpszMenuName = NULL;
                wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);
                wndclass.lpszClassName ="WINCLASS1";
               

                if (!RegisterClassEx(&wndclass))
                {
                    MessageBox(NULL,"ddd","ddd",MB_OK); 
                     return 0;
                }    //    //……

                hWnd=CreateWindowEx(NULL,"WINCLASS1",
                    "wndtitle",
                    WS_OVERLAPPEDWINDOW|WS_VISIBLE ,       
                    CW_USEDEFAULT, 0,
                    400,400,
                    NULL,
                    NULL,
                    hinstance,
                    NULL );
                if (!hWnd)
                        return 0;   
                ShowWindow(hWnd, ncmdshow);
                UpdateWindow(hWnd);
                while(GetMessage(&msg, NULL, 0, 0)) 
                {     
                    TranslateMessage(&msg); 
                    DispatchMessage(&msg); 
                }
               
                return msg.wParam;
            }

            轉(zhuǎn)帖注明來(lái)自軟工吧論壇
            此信息來(lái)自〖軟工吧論壇http://www.gcs8.cn
            查看原網(wǎng)址:http://www.gcs8.cn/htm_data/2/0811/15785.html

            posted @ 2008-11-11 10:42 李帥 閱讀(332) | 評(píng)論 (0)編輯 收藏

            2008年11月10日 #

              接口是一個(gè)沒有被實(shí)現(xiàn)的特殊的類,它是一系列操作的集合,我們可以把它看作是與其他對(duì)象通訊的協(xié)議。C++中沒有提供類似interface這樣的關(guān)鍵 字來(lái)定義接口,但是Mircrosoft c++中提供了__declspec(novtable)來(lái)修飾一個(gè)類,來(lái)表示該類沒有虛函數(shù)表,也就是虛函數(shù)都是純虛的。所以利用它我們依然可以定義一 個(gè)接口。代碼例子如下:

             

            #include <IOSTREAM>
            using namespace std;

            #define interface class __declspec(novtable)

            interface ICodec
            {
            public:
                
            virtual bool Decode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen);
                
            virtual bool Encode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen);
            };

            class CCodec : public ICodec
            {
            public:
                
            virtual bool Decode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen)
                 {
                     cout
            << "解碼..." << endl;
                    
            return true;
                 }
                
            virtual bool Encode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen)
                 {
                     cout
            << "編碼..." << endl;
                    
            return true;
                 }
            };

            int main(int argc, char* argv[])
            {
                 ICodec
            * pCodec = new CCodec();
                 pCodec
            ->Decode(NULL,0,NULL,NULL);
                 pCodec
            ->Encode(NULL,0,NULL,NULL);
                 delete (CCodec
            *)pCodec;
                
            return 0;
            }

             

            上面的ICodec接口等價(jià)于下面的定義:
            
            
            class ICodec
            {
            public:
                virtual bool Decode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen)=0;
                virtual bool Encode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen)=0;
            };
            posted @ 2008-11-10 09:44 李帥 閱讀(7235) | 評(píng)論 (0)編輯 收藏

            2008年11月8日 #

            根據(jù)微軟的說(shuō)法,Visual C++ 6.0 支持的最后一個(gè)SDK是 Windows Server 2003 PSDK 版本,幸運(yùn)的是在網(wǎng)上也找到了 XPSP2 PSDK 版本,在這里感謝網(wǎng)友發(fā)現(xiàn)的下載地址:

            Platform SDK XPSP2:
            http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm

            Platform SDK February 2003:

            http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm

            posted @ 2008-11-08 17:13 李帥 閱讀(9384) | 評(píng)論 (0)編輯 收藏

            2008年11月7日 #

            摘要:

              RTTI(Run-Time Type Identification)是面向?qū)ο蟪绦蛟O(shè)計(jì)中一種重要的技術(shù)。現(xiàn)行的C++標(biāo)準(zhǔn)對(duì)RTTI已經(jīng)有了明確的支持。不過(guò)在某些情況下出于特殊的開發(fā)需要,我們需要自己編碼來(lái)實(shí)現(xiàn)。本文介紹了一些關(guān)于RTTI的基礎(chǔ)知識(shí)及其原理和實(shí)現(xiàn)。  

            RTTI需求:

              和很多其他語(yǔ)言一樣,C++是一種靜態(tài)類型語(yǔ)言。其數(shù)據(jù)類型是在編譯期就確定的,不能在運(yùn)行時(shí)更改。然而由于面向?qū)ο蟪绦蛟O(shè)計(jì)中多態(tài)性的要求,C++中的指針或引用(Reference)本身的類型,可能與它實(shí)際代表(指向或引用)的類型并不一致。有時(shí)我們需要將一個(gè)多態(tài)指針轉(zhuǎn)換為其實(shí)際指向?qū)ο蟮念愋停托枰肋\(yùn)行時(shí)的類型信息,這就產(chǎn)生了運(yùn)行時(shí)類型識(shí)別的要求。

              C++對(duì)RTTI的支持

              C++提供了兩個(gè)關(guān)鍵字typeid和dynamic_cast和一個(gè)type_info類來(lái)支持RTTI:

              dynamic_cast操作符:它允許在運(yùn)行時(shí)刻進(jìn)行類型轉(zhuǎn)換,從而使程序能夠在一個(gè)類層次結(jié)構(gòu)安全地轉(zhuǎn)換類型。dynamic_cast提供了兩種轉(zhuǎn)換方式,把基類指針轉(zhuǎn)換成派生類指針,或者把指向基類的左值轉(zhuǎn)換成派生類的引用。見下例講述:

            void company::payroll(employee *pe) {
            //對(duì)指針轉(zhuǎn)換失敗,dynamic_cast返回NULL
            if(programmer *pm=dynamic_cast(pe)){
            pm->bonus();
            }
            }
            void company::payroll(employee &re) {
            try{
            //對(duì)引用轉(zhuǎn)換失敗的話,則會(huì)以拋出異常來(lái)報(bào)告錯(cuò)誤
            programmer &rm=dynamic_cast(re);
            pm->bonus();
            }
            catch(std::bad_cast){

            }
            }

              這里bonus是programmer的成員函數(shù),基類employee不具備這個(gè)特性。所以我們必須使用安全的由基類到派生類類型轉(zhuǎn)換,識(shí)別出programmer指針。

              typeid操作符:它指出指針或引用指向的對(duì)象的實(shí)際派生類型。

              例如:

            employee* pe=new manager;
            typeid(*pe)==typeid(manager) //true
              typeid可以用于作用于各種類型名,對(duì)象和內(nèi)置基本數(shù)據(jù)類型的實(shí)例、指針或者引用,當(dāng)作用于指針和引用將返回它實(shí)際指向?qū)ο蟮念愋托畔ⅰypeid的返回是type_info類型。

              type_info類:這個(gè)類的確切定義是與編譯器實(shí)現(xiàn)相關(guān)的,下面是《C++ Primer》中給出的定義(參考資料[2]中談到編譯器必須提供的最小信息量):

            class type_info {
            private:
            type_info(const type_info&);
            type_info& operator=( const type_info& );
            public:
            virtual ~type_info();
            int operator==( const type_info& ) const;
            int operator!=( const type_info& ) const;
            const char* name() const;
            };
             實(shí)現(xiàn)目標(biāo):

              實(shí)現(xiàn)的方案

              方案一:利用多態(tài)來(lái)取得指針或應(yīng)用的實(shí)際類型信息

              這是一個(gè)最簡(jiǎn)單的方法,也是作者目前所采用的辦法。

              實(shí)現(xiàn):

            enum ClassType{
            UObjectClass,
            URectViewClass,
            UDialogClass,
            ……
            };
            class UObject{
            virtual char* GetClassName() const {
            return "UObject";
            };
            virtual ClassType TypeOfClass(){
            return UObjectClass;
            };
            };
            class UDialog{
            virtual char* GetClassName() const {
            return "UDialog";
            };
            virtual ClassType TypeOfClass(){
            return UDialogClass;
            };
            };
              示例:

            UObject po=new UObject;
            UObject pr=new URectView;
            UObject pd=new UDialog;
            cout << "po is a " << po->GetClassName() << endl;
            cout << "pr is a " << pr->GetClassName() << endl;
            cout << "pd is a " << pd->GetClassName() << endl;
            cout<TypeOfClass()==UObjectClass<
            posted @ 2008-11-07 21:44 李帥 閱讀(302) | 評(píng)論 (0)編輯 收藏

            僅列出標(biāo)題  下一頁(yè)
            亚洲午夜久久久久久久久久| 中文精品99久久国产 | 久久人妻AV中文字幕| 区久久AAA片69亚洲| 国产aⅴ激情无码久久| 国产成人综合久久综合| 久久精品99无色码中文字幕| 欧美与黑人午夜性猛交久久久| 久久亚洲精品成人无码网站| 精品熟女少妇av免费久久| 99久久国产免费福利| 久久久精品人妻一区二区三区蜜桃| 久久久久久久亚洲Av无码| 香蕉久久一区二区不卡无毒影院| 日韩欧美亚洲国产精品字幕久久久| 色综合久久夜色精品国产| 97久久国产亚洲精品超碰热| 久久久久亚洲AV成人网人人软件| 国产美女亚洲精品久久久综合| 72种姿势欧美久久久久大黄蕉| 欧美日韩成人精品久久久免费看| 色婷婷久久综合中文久久蜜桃av| 久久婷婷久久一区二区三区| 久久久久亚洲av综合波多野结衣| 91精品国产91热久久久久福利| 麻豆av久久av盛宴av| 狠狠人妻久久久久久综合| 久久久久亚洲精品天堂| 久久久国产亚洲精品| 9999国产精品欧美久久久久久| 亚洲综合熟女久久久30p| 精品一久久香蕉国产线看播放| 久久精品国产亚洲AV嫖农村妇女 | 精品国产乱码久久久久软件| 国产精品久久久久aaaa| 久久久噜噜噜久久中文字幕色伊伊| 国产精品欧美久久久久天天影视 | 99热成人精品免费久久| 久久久久99精品成人片试看| 国内精品久久国产| 少妇久久久久久被弄到高潮|