最近碰到了乙個程式設計方面的小問題,最後以一種不完美的的方法解決了它,說出來可能比較有意思:
在寫我的程式(flashime,http://.d2ksoft.*** 一種仿輸入法軟體)當中,需要有乙個類記住最近的輸入到當前編輯器的字串(舊字串)。
當我下一次輸入新的字串的時候,我必須在輸入新的字串之前,先比較剪貼簿中的內容是否和舊字串的內容一樣。如果一樣,就有一些操作,如果不一樣,又有另外一些操作(操作的細節無關緊要)。然後我輸入新的字串,再用新字串的內容更新舊字串的內容。
我用乙個cmanagestr類來儲存舊字串,一開始這個類cmanagestr是這樣設計的:
class cmanagestr
~cmanagestr()
bool ***pare_with_clip();
update_from_new(const char* input);
private:
char* _buf;
}因為不能知道最近輸入的字串可能有多大,所以一開始的想法是用動態分配記憶體的辦法儲存舊字串。
但是由於開發的是仿輸入法的程式,所以cmanagestr型別的物件將會被多個程序共享使用。而指標顯然不能被多個程序共享。這樣就不能使用諸如_buf之類的指標型別的資料成員。
仔細考慮為什麼要儲存最近輸入的字串?實際上目的只是為了和剪貼簿中的字串比較,比較的結果只需要知道兩個字串是否相同。如果能夠放寬「相同」的定義,那麼就可以重新設計cmanagestr的資料成員,以使得cmanagestr物件可以被多個程序共享。
例如,將字串中的所有字元的ascii碼相加得到乙個整數(check sum)。要比較兩個字串是否相等,只要比較它們的checksum是否相等就可以了。我還可以去每個字串的前128位得到子字串。然後比較這兩個子字串。在我的程式中,我結合使用了這兩個辦法。當然這樣做只能保證有很大的概率得到我想要的結果。但是考慮到我程式的具體應用環境,乙個大概率正確(而不是絕對正確)的結果也是可以接受的。
class cmanagestr
~cmanagestr()
bool ***pare_with_clip();
update_from_new(const char* input);
private:
void sample(const char* input, char *prefix, unsigned long& checksum)
private:
char _latest_prefix[128];
unsigned long _latest_checksum;
}
建立乙個多程序程式
pcntl fork 建立新程序 pcntl waitpid 等待或返回fork的子程序狀態 posix getpid 返回當前程序 id posix getppid 取得父程序 id pcntl fork 呼叫一次,返回兩個值 子程序得到的是0,父程序得到的子程序 id。ps ef grep ph...
多程序讀能否同時寫乙個檔案
多個程序對同乙個檔案進行訪問會使得寫入的資料出現錯亂嗎,write與fwrite之間到底有什麼區別呢,哪種情況會丟掉資料呢.多個程序寫同乙個檔案不會出現資料交叉的情況 在多程序使用write時不會丟掉資料,fwrite會丟掉資料 fwrite速度優於writewrite版本 include incl...
Python多程序1 乙個多程序例項
學習 分類目錄 多程序 多程序與多執行緒類似,無論是在理論還是操作上,我在這裡就多執行緒寫了一點東西。多程序與多執行緒最大的區別是,多程序是真正意義上的 物理層面上的並行執行,每個程序會被分配到足夠的 在實際有那麼多的前提下 資源單獨進行運算。而多執行緒則是多個程序間共享資源,通過分時獲得資源的一種...