2014年3月21日
項目中有一個sqC產生的實體調用方法時,始終報818錯。刪掉bnd得編問題照舊。在同事的提示下--所有sqC文件名的前8個字符不能一樣--,找到重復文件重命名,刪掉BND文件,重編譯,搞定。
2013年5月18日
一、環(huán)境 編譯工具:VS2012 Express
操作系統(tǒng):Win7旗艦版 64
SVN客戶端
二、下載
三、編譯
1、打開VS2012 開發(fā)人員命令提示。
2、cd v8目錄。
3、執(zhí)行命令:
third_party\python_26\python.exe build\gyp_v8 -G msvs_version=2010
系統(tǒng)顯示
Updating projects from gyp files...
4、在命令行中輸入:build\all.sln,回車。
5、系統(tǒng)自動打開VS2012 IDE環(huán)境。
6、在IDE環(huán)境項目菜單中,更新項目,升級項目文件。
7、編譯。
2013年5月14日
/////////////////////////////////////////////////////////////////////////////////////
/// 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 ();
}
2013年5月10日
在Windows7下使用Qt creator開發(fā)程序,想直接在源代碼中使用中文字符串常量,源碼是utf8的,保持utf8是便于遷移到linux,VC編譯器總是報錯,串中有換行符,怪異的是如果恰好串只有兩個中文字符時,一切都是那么美好,多了,VC編譯器就會讓你痛苦了。
經過一番google,我總結了解決問題的原則:
絕對不要在源碼中使用中文字符串常量。
那要顯示的中文怎么做?用Qt Linguist.
下面是方法:
第一步:打開.pro文件,在最后面加入一行
TRANSLATIONS = cn.ts
可以自由命名右邊的.ts文件
第二步:選擇菜單:工具/外部/Qt翻譯家/更新翻譯(lupdate)
此時,系統(tǒng)將在.pro文件所在目錄生成cn.ts文件
第三步:打開cn.ts文件,注意是用菜單:打開文件,用...。這種方式,在對話框中選擇
Qt Linguist
第四步:在Qt Linguist中,漢化找到的源代碼中的字符串常量。
第五步:完成漢化后,保存并選擇【發(fā)布】。系統(tǒng)會在cn.ts文件所在目錄生成cn.qm文件。
第六步:把漢文件文件添加到,項目資源中。打開.qrc文件,添加cn.qm文件
/tr
cn.qm
第七步:使用漢化結果. 在主窗口顯示前,應用實例創(chuàng)建后安裝翻譯器。
QApplication a(argc, argv);
QTranslator translator;
translator.load(":tr/cn.qm");
a.installTranslator(&translator);
經驗:有些時候明明已經翻譯了,程序還是不生效,此時你可以選擇【清理項目】后再次構建,試一下。
2012年5月7日
1、項目目錄規(guī)劃
在project_dir下建立build, cmake, src三個目錄。
2、按照CMake要求,為項目編寫CMakeLists.txt文件。
3、調用CMake命令為eclipse生成項目文件,我把這些命令寫成腳本來執(zhí)行:
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,選擇菜單:文件/ 導入/常規(guī)/現(xiàn)有項目到工作空間中.。在“導入”對話框中,在“選擇根目錄”項目中指定目錄為project_dir/build.
eclipse會自動搜索到debug, release兩個目錄下的項目。
點擊“完成”按鈕。eclipse將自動加入項目。
5、build項目。
6、調試項目時,你需要在菜單:運行/調試配置 里新增配置信息,指定執(zhí)行文件的路徑。
2012年2月28日
圖本身沒有什么特別的,只是用來分析任務隊列,圖是用來推理的。
2010年9月30日
一、wxFormBuilder選擇utf8生成的cpp代碼,是無代碼簽名的,VS2008 express編譯過程中可能會出現(xiàn)字符串錯誤。
解決辦法是:打開文件菜單,選擇保存高級選項,在“編碼”中選擇“unicode - 代碼頁1200”,確定后,重新編譯。
二、wxFormBuilder制作wxFlexGridSizer布局時,其默認rows,cols都是2,這個值不會自動變化,因此,你添加了超個2*2個窗體后,生成的cpp代碼可以順利編譯,但運行過程會報超過2*2的錯。
解決辦法:調整rows, cols值。
更正:方法一,更簡單的處理是在項目屬性中勾選c++ properties/ use_microsoft_bom 設置,這樣生成的cpp文件,VS2008 Express 無礙編譯。
2010年7月29日
跑題
據(jù)說Oracle Berkeley DB"很好",就去試用一下,但是,它,很不給我面子,在put了半天之后,我想get一下寫入的東西,運行正常,但沒有結果返回,看了幾遍幫助,copy文檔的代碼,也是這個結果,就很是郁悶了。沒有太多的時間去追究問題,還好世上還有一些“美好”的東西。sqlite,也是嵌入數(shù)據(jù)庫,據(jù)說它快但是比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中國研發(fā)團隊的博客,講了一些與sqlite的關系。這里摘錄一下:
“Oracle Berkeley DB引入了SQLite的SQL層:包括用戶接口(sqlite3(), ODBC, JDBC等)和SQL語言處理層(Tokenizer、Parser及Generator),而底層引擎(虛擬機)則使用了BDB的存儲引擎。從而,將原來SQLite基于數(shù)據(jù)庫級別的并發(fā)提升一個級別 - 至BDB的基于頁(Page)級別的并發(fā),并可以利用BDB的更好的內存管理、數(shù)據(jù)和事務恢復功能、更多的擴展(如Berkeley DB的db_hotbackup、db_stat、db_archive等一系列命令行工具)。”
“
Berkeley DB SQL和SQLite使用上的區(qū)別
a) 對于用戶和開發(fā)人員來說,這兩個產品是沒有區(qū)別的。它們在SQL語法、API、命令行交互、PRAGAMAs 等方面都是一致的。我認為,用戶可以體驗的顯著區(qū)別有可能是性能和并發(fā)了 - 由于SQLite提供的是數(shù)據(jù)庫級別的鎖,而Berkeley DB SQL是頁(Page)級別的鎖,因此后者在絕大多數(shù)測試中都會快很多 (如Insert, Update, Delete, 并發(fā)操作等)。但是,由于DBSQL提供的細粒度鎖的機制,它又會帶來一些額外的開銷,一些極端的測試用例下會比SQLite慢上少許(但不明顯)。并且對于這些極端測試的案例,我們一直在進行性能優(yōu)化。
b) 對于已有的SQLite應用程序和工具而言,由于這兩者在調用接口都是一致的,因而都可以無縫支持。
c) 對于DBA人員來說,除了可以繼續(xù)使用SQLite原來的管理工具,您還可以使用BDB提供的db_hotbackup、db_stat、db_archive等一系列命令行工具來備份,監(jiān)控,升級等。另外,您還可以聯(lián)系Oracle尋求支持。
總體而言,我們有充分理由相信Oracle Berkeley DB SQL將會比SQLite更快,更穩(wěn)定。同時,我們也將會提供更好的支持服務。
”
正題
使用http://sqlitewrapper.kompex-online.com/ Kompex SQLite Wrapper 呵呵,超好用
完了
本想用wcsftime,_wcsftime_l來簡化時間格式化操作,顯示中文時間,于是就這樣整:
wchar_t buf[128];
wcsftime(buf, 128, L"%y年%m月%d ...." ...)
誰知道執(zhí)行成功,但buf里邊內容為空,注意不是"\0",是什么也沒有返回. 東找西查,可能是local相關問題。
好,我設置 "CHS",OK,(調試。。),再F5 , NND,sqlite又報一個互斥量錯誤,額的娘喲!消滅一個問題,又引入一個新問題。。。立即癡呆3分鐘:-(。
好了,好了,惹來起,躲得起,我可不會去探尋為什么sqlite會不給面子,不然這一天又過去了。
還好,有數(shù)據(jù),毛老人家講“自力更生,豐衣足食”,wcsprintf一樣的可用。。。
2010年6月4日
第一次,我在寫一個MFC程序,用CFile打開文件時,我認為當前路徑==程序路徑,文件名沒有采用絕對路徑。在程序執(zhí)行過程中,沒有打開任何文件對話框時,我的想當然是對的,可是只要彈出一個文件對話后,我就跌入了沼澤,耗時三天,才發(fā)現(xiàn)文件對話框是要更改當前路徑的。
每二次,我在寫一個服務時,一個函數(shù)里邊要打開讀取一個文件,在非服務程序的執(zhí)行過程中,函數(shù)表現(xiàn)正常。當我轉換成服務,在主函中調用它后,在服務啟動運行期間,它運行不正常。我又認為當前路徑==程序路徑,文件打開失敗,調試了一下午才找出原因。
“同一個錯誤,不能犯兩次”