2016-10-31 6 views
0

ローカルネットワーク用の簡単なピアツーピアインスタントメッセンジャーを作成しています。これはiniファイルを使用してUUIDを解析し、ネットワーク全体の識別子として使用します。 iniファイルは、QSettingsオブジェクトを通じてアクセスされます。私はプログラムの複数のインスタンスを同じコンピュータ上で実行できるようにするための機能を書いています。最初のプログラムが実行されると、最初のエントリのiniファイルが読み込まれ、読み込まれていれば "INUSE"に置き換えられます。終了すると、キー値が元のUUIDに置き換えられます。プログラムの別のインスタンスがiniファイルを読み込み、最初のキー値としてINUSEを読み込んだ場合は、その後ろに別のインスタンスを作成し、取得し、INUSEタグを2番目のキー値に置きます。クラッシュの場合に更新が必要なQt5 iniファイル

これはうまくいきますが、プログラムがクラッシュした場合、「INUSE」だったUUIDが失われ、手作業で取り出すまでINUSEが残ってしまいます。同じことを成し遂げているシステムでクラッシュするのをどうやって説明できますか?

IveはQLockFileを見ましたが、私はそのようなシステムをどのように実装するのか正確に頭を覆すことはできません。

コメントありがとうございます。

次のようにiniファイルの現在の形式は:

[uuid] 
1={uuid1} 
2={uuid2} 

プログラム1は

[uuid] 
1=INUSE 
2={uuid2} 

プログラム

本質的
[uuid] 
1={uuid1} 
2={uuid2} 

何の正常終了後に実行している間私はプログラム実行の間にデータを保存する方法が必要ですが、前記データは現在使用されている。

答えて

0

私は最初に、あなたのプログラムがクラッシュしているのかどうかを特定することだと思います。より良いソリューションを選択するために。

QLockFileを使用すると、同じファイルに複数のプロセスがアクセスするのを防ぐことができます。だから、プログラムがそれを打ち破っているのなら、これはあなたには役に立ちます。

、これまでどのようなプログラムがクラッシュした理由は、私はこれが発生したときに、正しいアクションを実行するために、例外の使用をお勧めします:

try { 
    // Some of your code 
} catch (exception &e) 
{ 
    // Some error occured, do something about it. 
    // Like restoring your UUID. 
} 

あなたは例外hereについての詳細を読むことができます、そしてあなたは常に使用することができますQTバージョンQexception

希望します。

+0

ありがとうございます。プログラムは私が現在認識しているところでクラッシュしませんが、UNIX上でSIGKILLメッセージが送信されたり、Windows上で同等のものが送信された場合、オリジナルの投稿の状況が表示されます – cbpeckles

+0

@cbpeckles次に、悪い言葉のIMO。私はあなたがそれを修正しなければあなたが望む答えを得られないとは思わない。 –

関連する問題