寫多程序程式碰到的乙個問題

2021-03-31 18:10:30 字數 1276 閱讀 1052

最近碰到了乙個程式設計方面的小問題,最後以一種不完美的的方法解決了它,說出來可能比較有意思:

在寫我的程式(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 乙個多程序例項

學習 分類目錄 多程序 多程序與多執行緒類似,無論是在理論還是操作上,我在這裡就多執行緒寫了一點東西。多程序與多執行緒最大的區別是,多程序是真正意義上的 物理層面上的並行執行,每個程序會被分配到足夠的 在實際有那麼多的前提下 資源單獨進行運算。而多執行緒則是多個程序間共享資源,通過分時獲得資源的一種...