バグの原因がわからない
■ このスレッドは過去ログ倉庫に格納されています
業者に相談する
↓
異常はありませんでした
↓
また壊れる
↓
ループ タイマーで10ms毎に処理
各処理の最初にタイマーを止めて最後にタイマーを再開にしてる
なのにnullチェックの後ろでたまにnull参照エラーになる タイマー停止完了までに次の呼び出しがされたらワンチャンあるか C#のSystem.Times.Timerっていうのを使ってる
nullチェック対象の変数はタイマー処理内以外では使ってない タイマー処理の最後にその変数にはnullを入れてる バグの原因なんて分からなくていい
解決策だけ分かれば ログ出せばデバッグできそうだけど対処としてはMutexかけて排他かな タイマー停止
処理
ヌルチェック
処理
処理←たまにヌル参照エラー
処理
ヌル代入
タイマー再開 無理に直そうとするなよ
どんな処理してるのか分からないけど
例外処理入れてnullだったらもう一周すればいいだろ ヌルチェックの前でmutex取ってnull後にmutex解放すれば処理中に別のスレッドがnull入れるの回避できるよ シングルスレッド?
それともマルチスレッド?
>>17も言ってるようにとりあえずMutexでロックするのが手っ取り早いのでは イベント処理?
タイマーなんて使うなよ
設計が悪いだろそれ 多少の処理(hoge書き換えなし)
タイマー停止
処理(hoge書き換えなし)
処理(hoge書き換え、ヌルの可能性もあり)
hogeヌルチェック
処理(hoge書き換えなし)←たまにヌル参照エラー
hogeにヌル代入
タイマー再開 タイマー停止までに次のタイマー処理呼び出しが来たらワンチャンある イベント駆動
処理の中で別の処理を呼んでる
タイマー開放してる hogeを書き換えてるのは全体で↓の二つの箇所だけ
やっぱりたまにタイマー停止が間に合わないのかな
多少の処理(hoge書き換えなし)
タイマー停止
処理(hoge書き換えなし)
処理(hoge書き換え、ヌルの可能性もあり)
hogeヌルチェック
処理(hoge書き換えなし)←たまにヌル参照エラー
hogeにヌル代入
タイマー再開 並行状態になってるときがないかログを取って確かめるか まあ対処だけなら簡単だけど原因を突き詰めたい
仕事でもなんてないし >>8
C#のタイマで10msが原因だわ
10msの精度なんかでないから同時にイベント発生する 10じゃなくて100のミス
まあ100も短いからワンチャンあるかもしれんよな
取り敢えずログを取るか 調べたけどC#のタイマーって並列で動作するからブロック内の処理が100ms以上かかれば普通に2重で処理行われるっぽいね ただ終了したかしないかに関わらずループ内の処理は行われるのならそういうことなんだろうね まあそもそも設計に問題はあるかもしれんな
でもその前に現状の原因だけ見つけておきたい ■ このスレッドは過去ログ倉庫に格納されています