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