ログの出力/照会時の排他処理について、教えて下さい。
環境
言語:VC++/CLI
OS:Win VISTA
前提
ログ出力
・APL起動時にログファイルをオープンする。
(基本的にはオープンしっぱなし)
・メッセージ受信などイベント取得時にログに書き込む。
(複数スレッドからの書込み処理あり)
・最大行数に達したら、ファイルをクローズして、
新規にファイルをオープンしてそちらに書き込む。
(aaa_1.log, aaa_2.log,・・・という具合)
ログ照会
・画面からボタン押下で今まで書き込んだログを照会する。
・ログ照会時はオープン→リード→クローズとなります。
質問
複数スレッドから書込み処理がある場合に備えて排他をかける
「読み込み時に書込み発生(EOFがおかしくなるとか)」や
「書込み時に読み込み発生(行の半端なところで表示されるとか)」など、バッティングした際を考慮した排他のかけ方
について注意点があればご教授頂きたいのですが・・・
単純に以下のような実装イメージでよろしいのでしょうか?
////////////////////////////////////
書込み処理
//変数定義
StreamWriter^ sw = nullptr;
起動時
メソッド1
sw = gcnew StreamWriter( "TestFile.txt" );
最大行数に達したら
メソッド2
sw->Close();
sw = gcnew StreamWriter( "TestFile2.txt" );
//イベント発生
メソッド3
//排他処理
sw->WriteLine( "aaaa" );
//排他解除
////////////////////////////////////
////////////////////////////////////
照会処理
//n=ファイルサイズを求めておく;
//排他処理
StreamReader^ sr = gcnew StreamReader( "TestFile.txt" );
array<Char>^c = nullptr;
while ( sr->Peek() >= 0 )
{
c = gcnew array<Char>(n);
sr->Read( c, 0, c->Length ); //ある理由でReadLineが
//使えそうにないです
//理由を説明すると
//長くなりそうなので
//省かせて下さい
//画面出力領域 ← c
}
sr->Close();
//排他解除
////////////////////////////////////
以上、宜しくお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
同期用には MutexクラスかReadWriterLockクラス等がいいでしょう
Mutexなら書き込みと読み込みで Mutexオブジェクトの取得に成功したら動作するようにするといった手順です
ファイルを開きっぱなしにするのであれば
Read処理の間に Writerに対してFlashなどを実行してバッファを書き出すなどの処理が必要でしょう
ご回答ありがとうございます。
現行システムではMonitorクラスというもので
ロックしているようです。
上のMutexクラスやReadWriterLockクラスとは違うのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 2 2023/03/02 18:54
- 分譲マンション 分譲マンションの管理組合・理事長です。この難しい件はどうすれば良いでしょうか? 9 2022/07/20 01:23
- CAD・DTP JWW-CADでDXF変換後の線が連動して消える 2 2023/01/13 11:09
- 政治 天皇機関説の否定が日本敗戦の原因ですね? 1 2023/02/25 23:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SwingUtilities.invokeLater(ne...
-
doGetとdoPostの違い
-
[Java] while(true)の意味
-
Javaアプリケーション実行の返...
-
Javaプログラムからポップアッ...
-
素数判定を再帰処理で
-
Javaプログラムから外部コマン...
-
JAVAからJAVASCRIPT関数を呼び出し
-
スレッド1とスレッド2を交互に...
-
数値の定数を付ける時
-
VBScriptでPing
-
ExcelVBA で文字列の特定の文字...
-
ブラウザを閉じた後のサーバ側...
-
データ未入力時のエラー処理が...
-
アコーディオンメニューをアン...
-
Linux上でのTomcatのServletプ...
-
JAVAにおける画像のJPEG保存の...
-
日付の0埋めについて
-
Tomcat高負荷時の設定について
-
JavaScriptからJAVAクラスを呼...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
数値の定数を付ける時
-
Javaでのデバッグコード削除
-
C#で別スレッドの終了を知りたい
-
[Java] while(true)の意味
-
Tomcatのスレッドを破棄する方法
-
Javaプログラムからポップアッ...
-
ラジオボタンの選択判定
-
JavaScriptからJAVAクラスを呼...
-
WPF C#でF10のイベント取得方法...
-
PHPでDB処理中にプログレスバー...
-
素数判定を再帰処理で
-
Javaアプリケーション実行の返...
-
switch文の中に、throws new Ex...
-
doGetとdoPostの違い
-
JDBCでテーブルUPDATE後の再検...
-
Tomcat高負荷時の設定について
-
ラベルの表示までが異常に遅い...
-
ExcelVBA で文字列の特定の文字...
-
SwingUtilities.invokeLater(ne...
おすすめ情報