一個程式每隔一秒就進行對A檔案的進行讀操作,另一個程式經常同時對A檔案進行寫操作時失敗,檔案型別是TIniFile。有什么簡單的方法解決這個問題嗎?謝謝
uj5u.com熱心網友回復:
不要寫那么頻繁吧。如果不想建立兩個程式間的通信,那么就簡單點:用定時器,讀時間,秒數模4為0第一個程式可操作,秒數模4第二個程式可操作。前提:1、每個程式都能很快操作完;2、每次都要重新讀入初始化值。uj5u.com熱心網友回復:
第一個程式是每一秒讀取一次而且必須是每秒第一次,第二個程式偶爾會有寫操作。
uj5u.com熱心網友回復:
檔案打開模式的問題,寫檔案的程式應該用fmOpenReadWrite + fmShareDenyWrite,讀檔案的程式可以用fmOpenRead + fmShareDenyNoneuj5u.com熱心網友回復:
我用的是TIniFile,TIniFile它打開檔案constructor Create(const FileName: String);似乎不支持打開方式的設定
uj5u.com熱心網友回復:
1、因為INI檔案讀寫時,是逐條讀寫,所以讀寫操作不上,比較慢。2、系統不允許一個檔案被二個程式,同時讀寫。否則,出錯。
3、如果非得分這樣話,可以通過:
(1)在A程式中,設定二個Boolean;型別的變數,
var F1,F2: Boolean;型別的變數,
A程式讀寫檔案時F1為真,否則為假;
B程式讀寫檔案時F2為真,否則為假;
這樣,通過共享記憶體方式,B程式也可讀寫F,F2。
4、操作時A程式當F2為假時,才能讀寫檔案。B程式當F1為假時,才能讀寫檔案。
uj5u.com熱心網友回復:
感覺像是行程間資料傳遞,如果是這樣,建議用共享記憶體+事件;管道等方式,可靠,安全,及時,檔案來傳遞,不太好uj5u.com熱心網友回復:
程式A讀檔案, 可以先拷貝出一個副本然后再讀;程式B寫完后, 同時通知程式A,需要重新拷貝
uj5u.com熱心網友回復:
讀寫ini也是很快的,最簡單的就是加定時器判斷時鐘的秒。復雜點行程間通信,或者網路通信……
uj5u.com熱心網友回復:
同時讀寫的,建議通過排斥鎖進行鎖定處理uj5u.com熱心網友回復:
一般情況下,共享沖突都是交由系統自動判斷及處理比較好樓主的情況可以嘗試用TMEMO的LOADFROMFILE及SAVETOFILE方法進行處理解決共享沖突,不過對于INI的格式操作就得再進行處理
uj5u.com熱心網友回復:
這個不就是跨行程同步最好的例子嗎!內核物件!uj5u.com熱心網友回復:
有一個辦法。通過標準時間,進行分配,比如一分鐘,前三十秒由A讀寫INI檔案,后三十秒由B程式讀寫INI誰的。uj5u.com熱心網友回復:
可以寫一個DLL專門讀寫INI檔案uj5u.com熱心網友回復:
問題解決發嗎?uj5u.com熱心網友回復:
具體代碼怎么樣?uj5u.com熱心網友回復:
你搜索一下,共享記憶體!
uj5u.com熱心網友回復:
用記憶體映射檔案嘛,也不復雜uj5u.com熱心網友回復:
跨行程同步用互斥體、信號量。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/58215.html
標籤:語言基礎/算法/系統設計
