![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
Windows2000上でVCを使用してソフトを作成しています。(MFCベース)
処理経過を確認するためにログファイルを保存し、この中にはログを落とす際の日付と現象を保存しています。ここで、日付が前後する現象が発生していることがわかりました。このため経過時間を確認して処理を行っている箇所で、問題が生じています。何か対処方法はないでしょうか。よろしくお願いします。
使用している関数:
時間取得・・・time(&now_t);
時間差取得・・・double t = difftime(now_t, m_BaseTime);
ソフト構成:
いくつかのスレッドを起動し、各スレッドより同一
のログファイルに保存しています。但し、この際、
クリティカルセクションで競合が発生しないように
配慮しているつもりです。
異常ログの具体例:
A07からB01に移行する際に、10分から
9分に時間が戻っているような感じです。またログ
保存している現象の内容からは、A01~B03の
並びは時系列となっており、現象自体は正常な順序で
保存されています。
2004年04月06日 04時09分59.463秒 A01
2004年04月06日 04時10分00.114秒 A02
2004年04月06日 04時10分03.118秒 A03
2004年04月06日 04時10分03.318秒 A04
2004年04月06日 04時10分03.549秒 A05
2004年04月06日 04時10分03.559秒 A06
2004年04月06日 04時10分03.869秒 A07
2004年04月06日 04時09分08.635秒 B01
2004年04月06日 04時09分08.645秒 B02
2004年04月06日 04時09分08.645秒 B03
以上分かり難い説明と思いますが、よろしくお願い致します。
No.3ベストアンサー
- 回答日時:
いろいろと可能性は考えられます。
例えばこういうタイミングで動作している可能性はありませんか?
A01 ____~~~~~~~~~~~~~~~~~~____
...........time()...difftime()
B01 _~~~_________________~~~___
........time().............difftime()
固定幅フォントでないとうまく見えませんが、
time()とdifftime()の間に他のスレッドの
time(),difftime()が動く可能性があるということです。
あと、マルチスレッド対応のライブラリを使用していますよね?
後は、何かグローバルな変数かスタティックな変数使っていて問題起こしているかとか。
それとログですが、こういう場合は専用のログ出力スレッドを作成し、
他のスレッドはログスレッドへメッセージなどのスレッド間通信で行うのが堅実な手です。
回答いただきありがとうございます。
スレッドの動作を更に深く調査してみようと思います。
また、ログ出力専用スレッドは有効と思われますので
更に検討してみます。
ありがとうございました。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?5a7ff87)
No.2
- 回答日時:
ログ出力は、個々のスレッドで行っているのしょうか。
1つの共通関数(ログ出力関数)を作成し、個々のスレッドが、それをよびだすようにしては、いかがですか。
ログ出力の間は、クリティカルセッションとし、その関数の中で、ログ出力時間を取得するようにすれば、上記の問題は発生しないと思いますが。(ただ、今回の場合はあまりに時間がかけ離れているので、#1のかたが指摘されていることが原因なのかも知れません)
尚、ログ出力時にその関数の中で、毎回ログファイルをオープン&クローズすれば、さらに確実かとおもいます。但し、クリティカルセッションの中でのオープン&クローズで、パフォーマンス上問題が発生するようでしたら、だめですが・・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 医療保険 コロナ入院保険金 1 2022/05/24 14:34
- 厚生年金 2022年10月から、パート・アルバイト短時間労働者の厚生年金・社会保険の加入義務 2 2022/09/09 22:52
- 相続税・贈与税 養老保険の満期時の贈与税、所得税について 4 2022/12/19 11:39
- アルバイト・パート 2022年10月からの扶養内勤務(パート)についてお伺いします。 先日新しいパート先の面接にて扶養内 3 2022/09/15 21:05
- 金融業・保険業 アスベスト含有瓦の住宅 3 2022/11/23 17:09
- 所得・給料・お小遣い 給与明細に関して 3 2022/04/20 15:42
- iPhone(アイフォーン) GPSの異常ですか?端末故障?不正アクセス? 2 2022/10/20 19:38
- 食べ物・食材 ワラビの色が移った煮物は食べられる? 2 2023/05/16 20:30
- Visual Basic(VBA) エクセルのマクロコードの一部分を変更する方法について教えてください。 2 2023/02/17 08:40
- 高校 日商簿記3級の勉強中なのですが 精算表が完成せず困っています。 こちらの問題の回答を教えていただきた 2 2023/03/02 09:07
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スレッドの監視方法について
-
VC++スレッドの正しい終了のさ...
-
_beginthreadexについて
-
volatile の使い方
-
pthread_cond_wait 取りこぼし?
-
WaitForSingleObjectの使い方に...
-
VisualC++で関数を裏で実行したい
-
VC++ メインループでのイベン...
-
MFC通信プログラムマルチスレッ...
-
KENT "Web Patio" のトピックス...
-
CPU資源をなるべく消費しないで...
-
【C++】boost threadについて
-
並列計算について
-
WindowAPI スレッドのステータ...
-
マルチスレッド?
-
_beginthreadexで生成したスレ...
-
Windows上で、シグナル(SIGTERM...
-
閉じてしまったダイアログのエ...
-
スレッド内でのマルチスレッド...
-
マルチスレッドについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++スレッドの正しい終了のさ...
-
WaitForSingleObjectの使い方に...
-
マイクロソフトedge で5チャン...
-
スレッドの安全な終了のさせ方
-
スレッドの終了はどうやるんで...
-
スレッドにて同一メモリの書き...
-
スレッドの監視方法について
-
マルチスレッドについて
-
スレッドの終了の仕方
-
Linuxでスレッド優先度って変え...
-
Windows上で、シグナル(SIGTERM...
-
LinuxでDoEvents()同等機能
-
VB2005 シリアル通信のClose処理
-
待機関数(WaitForMultipleObjec...
-
マルチスレッドプログラミング...
-
_beginthreadexで生成したスレ...
-
msec単位のWait Timerが作れない!
-
別スレッドからメインダイアロ...
-
マルチスレッドのスレッド数を...
-
.NetのBackgroundWorkerクラス...
おすすめ情報