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

            看前面黑咚咚,待俺上前殺它個干干凈凈。。。

             

            2014年3月21日

            db2 818坑

            項目中有一個sqC產生的實體調用方法時,始終報818錯。刪掉bnd得編問題照舊。在同事的提示下--所有sqC文件名的前8個字符不能一樣--,找到重復文件重命名,刪掉BND文件,重編譯,搞定。

            posted @ 2014-03-21 10:35 山城,山 閱讀(376) | 評論 (0)編輯 收藏

            2013年5月18日

            在Win7上編譯 google V8

            一、環境
            編譯工具:VS2012 Express
            操作系統:Win7旗艦版 64
            SVN客戶端
             
            二、下載
            1、創建目錄v8,用v8目錄,check out: http://v8.googlecode.com/svn/trunk/
            2、創建目錄v8\build\gyp,用gyp目錄,check out:http://gyp.googlecode.com/svn/trunk
            3、創建目錄v8\third_party\cygwin,用cygwin目錄,check out:http://src.chromium.org/svn/trunk/deps/third_party/cygwin
            4、創建目錄v8\third_party\python_26,用python_26目錄,check out:http://src.chromium.org/svn/trunk/tools/third_party/python_26
             
            注:上面的check out目錄同https://code.google.com/p/v8/wiki/BuildingWithGYP一文所述目錄不一致,文中所述目錄是無效的。
             
            三、編譯
            1、打開VS2012 開發人員命令提示。
            2、cd v8目錄。
            3、執行命令:
               third_party\python_26\python.exe build\gyp_v8 -G msvs_version=2010
               系統顯示
               Updating projects from gyp files...
            4、在命令行中輸入:build\all.sln,回車。
            5、系統自動打開VS2012 IDE環境。
            6、在IDE環境項目菜單中,更新項目,升級項目文件。
            7、編譯。

            posted @ 2013-05-18 13:03 山城,山 閱讀(502) | 評論 (0)編輯 收藏

            2013年5月14日

            Linux守護程序類-daemon

            /////////////////////////////////////////////////////////////////////////////////////
            ///   daemon 測試類
            #include <unistd.h>
            #include <syslog.h>
            #include <stdlib.h>
            #include "daemon.h"

            class logger : public daemon
            {
            public:
                logger() : daemon("日志")
                {}

                void do_something()
                {
                    while(true)
                    {
                        syslog (LOG_NOTICE, "Writing to my Syslog");

                        sleep(5);
                    }
                }
            };

            int main(int argc, char *argv[]) {
                logger l;

                l.run();

                return 0;
            }

            ////////////////////////////////////////////////////////////////////////////
            //   .h

            #ifndef DAEMON_H
            #define DAEMON_H

            #include <string>

            class daemon{
            public:
                const std::string name;
            public:
                daemon(const char* nm);

                void run();

            private:
                static void fork_off_parent();
                static void set_child_context();
                virtual void open_log();
                virtual void do_something() =0;
                virtual void finish();
            private:
                daemon(const daemon&);
                daemon& operator=(const daemon&);
            };

            #endif // DAEMON_H

            /////////////////////////////////////////////////////////////////////////////////
            //  .cpp
            /*
             * cp from  
            http://shahmirj.com/blog/beginners-guide-to-creating-a-daemon-in-linux
             
            */

            #include "daemon.h"

            #include <sys/stat.h>
            #include <stdlib.h>
            #include <unistd.h>
            #include <syslog.h>

            daemon::daemon(const char *nm) : name(nm)
            {}

            void daemon::run()
            {
                fork_off_parent();
                set_child_context();
                open_log();
                do_something();
                finish();
            }

            void daemon::fork_off_parent()
            {
                //Fork the Parent Process
                pid_t pid = fork();

                if (pid < 0)
                {
                    exit(EXIT_FAILURE);
                }

                //We got a good pid, Close the Parent Process
                if (pid > 0)
                {
                    exit(EXIT_SUCCESS);
                }
            }

            void daemon::set_child_context()
            {
                //Change File Mask
                umask(0);

                //Create a new Signature Id for our child
                pid_t sid = setsid();
                if (sid < 0)
                {
                    exit(EXIT_FAILURE);
                }

                //Change Directory
                
            //If we cant find the directory we exit with failure.
                if ((chdir("/")) < 0)
                {
                    exit(EXIT_FAILURE);
                }

                //Close Standard File Descriptors
                close(STDIN_FILENO);
                close(STDOUT_FILENO);
                close(STDERR_FILENO);
            }

            void daemon::open_log()
            {
                //Set our Logging Mask and open the Log
                setlogmask(LOG_UPTO(LOG_NOTICE));
                openlog(name.c_str(), LOG_CONS | LOG_NDELAY | LOG_PERROR | LOG_PID, LOG_USER);

                syslog(LOG_INFO, "Entering Daemon");
            }

            void daemon::finish()
            {
                //Close the log
                closelog ();
            }

            posted @ 2013-05-14 14:01 山城,山 閱讀(320) | 評論 (0)編輯 收藏

            2013年5月10日

            Qt程序源碼中,中文常量字符串問題及翻譯家的使用

                在Windows7下使用Qt creator開發程序,想直接在源代碼中使用中文字符串常量,源碼是utf8的,保持utf8是便于遷移到linux,VC編譯器總是報錯,串中有換行符,怪異的是如果恰好串只有兩個中文字符時,一切都是那么美好,多了,VC編譯器就會讓你痛苦了。
                經過一番google,我總結了解決問題的原則:
                絕對不要在源碼中使用中文字符串常量。
                那要顯示的中文怎么做?用Qt Linguist.

            下面是方法:


            第一步:打開
            .pro文件,在最后面加入一行

            TRANSLATIONS = cn.ts

            可以自由命名右邊的.ts文件

             

            第二步:選擇菜單:工具/外部/Qt翻譯家/更新翻譯(lupdate)

            此時,系統將在.pro文件所在目錄生成cn.ts文件

             

            第三步:打開cn.ts文件,注意是用菜單:打開文件,用...。這種方式,在對話框中選擇

            Qt Linguist

             

            第四步:在Qt Linguist中,漢化找到的源代碼中的字符串常量。

             

            第五步:完成漢化后,保存并選擇【發布】。系統會在cn.ts文件所在目錄生成cn.qm文件。

            第六步:把漢文件文件添加到,項目資源中。打開.qrc文件,添加cn.qm文件

            /tr

                 cn.qm

             

             

            第七步:使用漢化結果. 在主窗口顯示前,應用實例創建后安裝翻譯器。

            QApplication a(argc, argv);

             

            QTranslator translator;

             

            translator.load(":tr/cn.qm");

            a.installTranslator(&translator);

             

            經驗:有些時候明明已經翻譯了,程序還是不生效,此時你可以選擇【清理項目】后再次構建,試一下。

            posted @ 2013-05-10 16:09 山城,山 閱讀(2374) | 評論 (0)編輯 收藏

            2012年5月7日

            Linux 平臺Eclipse與CMake結合的方法

             

            1、項目目錄規劃

             

                project_dir下建立build, cmake, src三個目錄。

              

            2、按照CMake要求,為項目編寫CMakeLists.txt文件。

             

            3、調用CMake命令為eclipse生成項目文件,我把這些命令寫成腳本來執行:

                    make_project.sh

             

            #!/bin/sh

            mkdir -p build/release

            mkdir -p build/debug

            cmake -E chdir build/release cmake -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_BUILD_TYPE=release ../../

            cmake -E chdir build/debug cmake -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_BUILD_TYPE=debug ../../

             

            4、打開eclipse,選擇菜單:文件/ 導入/常規/現有項目到工作空間中.。在“導入”對話框中,在“選擇根目錄”項目中指定目錄為project_dir/build.

                eclipse會自動搜索到debug, release兩個目錄下的項目。

                點擊“完成”按鈕。eclipse將自動加入項目。

             

            5build項目。

             

            6、調試項目時,你需要在菜單:運行/調試配置 里新增配置信息,指定執行文件的路徑。

            posted @ 2012-05-07 15:55 山城,山 閱讀(6684) | 評論 (0)編輯 收藏

            2012年2月28日

            一張圖

            圖本身沒有什么特別的,只是用來分析任務隊列,圖是用來推理的。

            posted @ 2012-02-28 17:20 山城,山 閱讀(223) | 評論 (0)編輯 收藏

            2010年9月30日

            wxFormBuildert雜記二則

            一、wxFormBuilder選擇utf8生成的cpp代碼,是無代碼簽名的,VS2008 express編譯過程中可能會出現字符串錯誤。
                     解決辦法是:打開文件菜單,選擇保存高級選項,在“編碼”中選擇“unicode - 代碼頁1200”,確定后,重新編譯。
            二、wxFormBuilder制作wxFlexGridSizer布局時,其默認rows,cols都是2,這個值不會自動變化,因此,你添加了超個2*2個窗體后,生成的cpp代碼可以順利編譯,但運行過程會報超過2*2的錯。
                     解決辦法:調整rows, cols值。


            更正:方法一,更簡單的處理是在項目屬性中勾選c++ properties/ use_microsoft_bom 設置,這樣生成的cpp文件,VS2008 Express 無礙編譯。

            posted @ 2010-09-30 08:29 山城,山 閱讀(419) | 評論 (0)編輯 收藏

            2010年7月29日

            sqlite簡明使用

            跑題
            據說Oracle Berkeley DB"很好",就去試用一下,但是,它,很不給我面子,在put了半天之后,我想get一下寫入的東西,運行正常,但沒有結果返回,看了幾遍幫助,copy文檔的代碼,也是這個結果,就很是郁悶了。沒有太多的時間去追究問題,還好世上還有一些“美好”的東西。sqlite,也是嵌入數據庫,據說它快但是比Oracle Berkeley DB“遜色”,但Oracle Berkeley DB 11g的sql引擎是用sqlite的,最重要的它還是免費的。
            有興趣了解的朋友可以去這里看一下。
            http://www.bdbchina.com/2010/03/oracle-berkeley-db-%E6%94%AF%E6%8C%81sql%E5%95%A6%EF%BC%81/
            BDB中國研發團隊的博客,講了一些與sqlite的關系。這里摘錄一下:

            “Oracle Berkeley DB引入了SQLite的SQL層:包括用戶接口(sqlite3(), ODBC, JDBC等)和SQL語言處理層(Tokenizer、Parser及Generator),而底層引擎(虛擬機)則使用了BDB的存儲引擎。從而,將原來SQLite基于數據庫級別的并發提升一個級別 - 至BDB的基于頁(Page)級別的并發,并可以利用BDB的更好的內存管理、數據和事務恢復功能、更多的擴展(如Berkeley DB的db_hotbackup、db_stat、db_archive等一系列命令行工具)。”


            Berkeley DB SQL和SQLite使用上的區別

            a) 對于用戶和開發人員來說,這兩個產品是沒有區別的。它們在SQL語法、API、命令行交互、PRAGAMAs 等方面都是一致的。我認為,用戶可以體驗的顯著區別有可能是性能和并發了 - 由于SQLite提供的是數據庫級別的鎖,而Berkeley DB SQL是頁(Page)級別的鎖,因此后者在絕大多數測試中都會快很多 (如Insert, Update, Delete, 并發操作等)。但是,由于DBSQL提供的細粒度鎖的機制,它又會帶來一些額外的開銷,一些極端的測試用例下會比SQLite慢上少許(但不明顯)。并且對于這些極端測試的案例,我們一直在進行性能優化。

            b) 對于已有的SQLite應用程序和工具而言,由于這兩者在調用接口都是一致的,因而都可以無縫支持。

            c) 對于DBA人員來說,除了可以繼續使用SQLite原來的管理工具,您還可以使用BDB提供的db_hotbackup、db_stat、db_archive等一系列命令行工具來備份,監控,升級等。另外,您還可以聯系Oracle尋求支持。

            總體而言,我們有充分理由相信Oracle Berkeley DB SQL將會比SQLite更快,更穩定。同時,我們也將會提供更好的支持服務。


            正題
            使用http://sqlitewrapper.kompex-online.com/ Kompex SQLite Wrapper 呵呵,超好用

            完了

            posted @ 2010-07-29 17:32 山城,山 閱讀(705) | 評論 (0)編輯 收藏

            wcsftime,_wcsftime_l之困

            本想用wcsftime,_wcsftime_l來簡化時間格式化操作,顯示中文時間,于是就這樣整:
                wchar_t buf[128];
                wcsftime(buf, 128, L"%y年%m月%d ...." ...)
            誰知道執行成功,但buf里邊內容為空,注意不是"\0",是什么也沒有返回. 東找西查,可能是local相關問題。
            好,我設置  "CHS",OK,(調試。。),再F5 , NND,sqlite又報一個互斥量錯誤,額的娘喲!消滅一個問題,又引入一個新問題。。。立即癡呆3分鐘:-(。
               好了,好了,惹來起,躲得起,我可不會去探尋為什么sqlite會不給面子,不然這一天又過去了。
            還好,有數據,毛老人家講“自力更生,豐衣足食”,wcsprintf一樣的可用。。。

            posted @ 2010-07-29 17:27 山城,山 閱讀(1071) | 評論 (0)編輯 收藏

            2010年6月4日

            當前路徑 !=程序路徑 --我吃了它的苦頭

                第一次,我在寫一個MFC程序,用CFile打開文件時,我認為當前路徑==程序路徑,文件名沒有采用絕對路徑。在程序執行過程中,沒有打開任何文件對話框時,我的想當然是對的,可是只要彈出一個文件對話后,我就跌入了沼澤,耗時三天,才發現文件對話框是要更改當前路徑的。
                每二次,我在寫一個服務時,一個函數里邊要打開讀取一個文件,在非服務程序的執行過程中,函數表現正常。當我轉換成服務,在主函中調用它后,在服務啟動運行期間,它運行不正常。我又認為當前路徑==程序路徑,文件打開失敗,調試了一下午才找出原因。

            “同一個錯誤,不能犯兩次”

            posted @ 2010-06-04 23:17 山城,山 閱讀(516) | 評論 (1)編輯 收藏

            僅列出標題  下一頁

            導航

            統計

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲精品无码久久一线| 国产一级持黄大片99久久| 久久综合亚洲色HEZYO国产| 狠狠色丁香婷婷久久综合五月| 久久婷婷午色综合夜啪| 久久婷婷五月综合色奶水99啪| 久久99国产精品久久| 久久天天躁狠狠躁夜夜av浪潮| 无码人妻久久一区二区三区免费丨 | 少妇人妻综合久久中文字幕| 人人狠狠综合久久88成人| 亚洲国产精品婷婷久久| 久久久www免费人成精品| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 久久天天躁狠狠躁夜夜avapp| 办公室久久精品| 久久久噜噜噜www成人网| 开心久久婷婷综合中文字幕| 嫩草伊人久久精品少妇AV| 婷婷久久综合九色综合绿巨人| 亚洲国产精品久久电影欧美| 久久精品国产清自在天天线| 久久99精品久久久久子伦| 国内精品久久久久影院亚洲| 99久久精品免费看国产一区二区三区 | 2022年国产精品久久久久| 无码人妻久久一区二区三区蜜桃 | 久久久久九九精品影院| 久久综合九色综合欧美狠狠| 久久永久免费人妻精品下载| 久久综合亚洲色HEZYO社区| 久久精品国产黑森林| 亚洲午夜久久久精品影院| 亚洲一区二区三区日本久久九| 久久99亚洲网美利坚合众国| 亚洲αv久久久噜噜噜噜噜| 综合网日日天干夜夜久久| 婷婷伊人久久大香线蕉AV | 精品久久久久久无码专区不卡 | 国产精品免费久久久久久久久| 久久精品国产半推半就|