
VC++でログファイルを作成しており、ファイルには事象が発生した日付時刻を組み合わせて保存しています。通常であれば、発生した事象の並びに合わせて時刻も推移していますが、時々、後に発生した事象に対する時刻が、直前の事象に対する時刻より前の時刻が保存されてしまう現象が発生しています。(0.5~1秒強前後ですが。)OSはNT、2000系です。プログラム作成上で要注意項目等あれば教えていただけないでしょうか。
※1:時間取得には「time()」を使用しています。
※2:マルチスレッド上でのソフト作成を行っていますが、ログ保存処理には排他制御を施しているつもりです。
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
ライブラリはマルチスレッド用のを使ってますよね?
マルチスレッドの処理内容がわからないとなんとも言えませんが,
時間取得のタイミングや、ログ書き込みのタイミング,
排他制御の方法(期間)の関係で,ログ書き込みの順番が入れ替わる可能性はありませんか?
こんな感じで。
スレッド1 スレッド2
時刻取得 ----
---- 時刻取得
---- ログ書込
ログ書込 ----
このような場合、単にログ書込の排他制御では回避できませんし、
GetTickCount等を使っても回避できません。
この場合なら簡単な回避方法は、排他制御の期間を時刻取得前からログ書込み完了後までにすることです。
性能上の問題とか,長時間になりすぎるとかがある場合は別な方法にする必要がありますが。
No.1
- 回答日時:
マルチスレッドが原因でしょうね。
GetTickCount、あるいはGetSysTimeで取得してはどうでしょうか?
基本的に原因は排他制御ができていないのだと思います。
time()で取得した瞬間からログ書込みの間に他のスレッドが
time()を実行しているのでしょう。
スレッド1:time()→ログ書込み
スレッド2:time()→ログ書込み
スレッド1実行中にスレッド2が1サイクルしてしまっているのでは?
ログ書込み直前にtime()で取得すれば、誤差は縮まると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- 会社・職場 毎日のように遅刻してくる、職場の男性。 この男性11時出勤なんですが、毎日のように遅刻してきます。 5 2023/03/15 15:06
- 哲学 時刻を知らない状態でバスに乗ろうかなと思うといつも発車(通過)後5,6分にバス停着きます。 時刻表を 5 2023/02/05 17:22
- 時計・電卓・電子辞書 ソーラー腕時計の自動時刻合わせが、いつもずれてしまう 7 2022/12/04 10:36
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- Windows 10 パソコンを再起動、起動するたびに時間が戻る。 7 2022/10/20 06:01
- その他(コンピューター・テクノロジー) Power Shellコマンドで作成日時を一括シフトする方法 3 2022/10/21 12:37
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
- 電子レンジ・オーブン・トースター 電子レンジの非科学的(カルト的)動作の原因について考えられる理由を知りたい 8 2022/11/29 14:47
- 派遣社員・契約社員 派遣について詳しい方へ質問 1 有給の具体的な1日の金額は普段勤務している金額ではなく、もっと低いの 3 2023/05/09 15:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Webクエリで”次の10件”も自動で...
-
GetLongPathName関数について
-
システム日付の表示方法
-
gethostbyaddrでのホスト名取得...
-
コンボボックスにdateで取...
-
HTMLのSELECTタグの選択肢...
-
アイコンの自動整列の属性取得 API
-
リクエストからArrayListのデー...
-
JavaScriptでリンク先やリモー...
-
VBScriptでのPCカード操作方法...
-
時刻データが前後します
-
CGIで受信パラメータを解析...
-
エクセルVbaのエラー処理が...
-
PCインストール済みのアプリケ...
-
C#でネットワーク(LAN)上のPC...
-
指定のURLのタイトルを取得...
-
ListViewで複数選択された項目...
-
URLパラメータの取得方法を教え...
-
VBでインストール済みアプリケ...
-
バッチ処理hhhhについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
ListView 項目の選択/選択解除...
-
VBA:小数点以下の数字を取得で...
-
VBAでActiveDirectoryのユーザ...
-
利用者側のMACアドレスを取得し...
-
count(*)で取得した値をJAVAの...
-
Flexgridで選択行の列の値を取...
-
Spreadの選択行の取得について
-
like演算子内に変数って使えな...
-
EXCELのリストボックスを選択し...
-
データ数をカウントしたいのですが
-
VBA Shapesの座標からセル位置...
-
NTPサーバから時刻を取得する
-
VBA リストボックス内の値を複...
-
エクセルVBAで複数選択できるよ...
-
JavaScriptにおいてコンピュー...
-
時間を分に変換するプログラム
-
JavaScriptでWindowsログオンID...
-
「Excel VBA」 Webクエリ マク...
-
javaで週の最初の日(例:月曜日...
おすすめ情報