From 7ffba859032afa9d3d12b7523728ec8d7fced929 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20V=C3=B6gele?= Date: Thu, 1 May 2014 18:10:01 +0200 Subject: [PATCH] Threads werden nicht mehr im Konstruktor gestartet, um race conditions zu vermeiden --- src/Backend.cs | 6 ++++++ src/Gui/Gui.cs | 9 +++++++-- src/Gui/IBackend.cs | 2 ++ src/Parser.cs | 8 +++++--- src/Receiver.cs | 8 ++++++-- src/Sender.cs | 6 +++++- 6 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/Backend.cs b/src/Backend.cs index d80c5e4..07ce862 100644 --- a/src/Backend.cs +++ b/src/Backend.cs @@ -112,6 +112,12 @@ namespace WorldOfPeacecraft Gui.PerformRefresh(); } + public void StartThreads() { + Parse.Start (); + Rec.Start (); + Send.Start (); + } + public void Stop() { Parse.Stop (); Send.Stop (); diff --git a/src/Gui/Gui.cs b/src/Gui/Gui.cs index 80c918d..bfc04a5 100644 --- a/src/Gui/Gui.cs +++ b/src/Gui/Gui.cs @@ -17,7 +17,6 @@ namespace WorldOfPeacecraft public Gui () { AllocConsole(); - InitializeComponents(); } public void SetBackend (IBackend backend) @@ -25,6 +24,13 @@ namespace WorldOfPeacecraft Backend = backend; } + protected override void OnLoad (EventArgs e) + { + base.OnLoad (e); + InitializeComponents (); + Backend.StartThreads (); + } + public void InitializeComponents () { this.SuspendLayout(); @@ -40,7 +46,6 @@ namespace WorldOfPeacecraft this.Controls.Add(Board); this.ResumeLayout(); - this.PerformLayout(); } protected override void OnClosing (System.ComponentModel.CancelEventArgs e) diff --git a/src/Gui/IBackend.cs b/src/Gui/IBackend.cs index 81c818f..0a583af 100644 --- a/src/Gui/IBackend.cs +++ b/src/Gui/IBackend.cs @@ -10,6 +10,8 @@ namespace WorldOfPeacecraft IEnumerable GetDragons(); + void StartThreads(); + void Stop(); } } diff --git a/src/Parser.cs b/src/Parser.cs index 1fc5fbb..01d9d09 100644 --- a/src/Parser.cs +++ b/src/Parser.cs @@ -62,7 +62,6 @@ namespace WorldOfPeacecraft Message = new LinkedList (); LastLineRegex = new Regex ("^end:[0-9]+$"); ParserThread = new Thread (new ThreadStart (this.RunParser)); - ParserThread.Start(); } private void RunParser () @@ -454,12 +453,15 @@ namespace WorldOfPeacecraft return LastLineRegex.IsMatch (lastLine); } + public void Start () + { + ParserThread.Start(); + } + public void Stop () { ParserThread.Abort (); } - - private class Block { diff --git a/src/Receiver.cs b/src/Receiver.cs index a66e957..82a9851 100644 --- a/src/Receiver.cs +++ b/src/Receiver.cs @@ -17,7 +17,6 @@ namespace WorldOfPeacecraft this.Client = client; this.ReceiverBuffer = buffer; ReceiverThread = new Thread(new ThreadStart(this.doReceive)); - ReceiverThread.Start(); } public string Receive () @@ -33,9 +32,14 @@ namespace WorldOfPeacecraft } } + public void Start() + { + ReceiverThread.Start (); + } + public void Stop() { - ReceiverThread.Abort(); + ReceiverThread.Abort (); } } } diff --git a/src/Sender.cs b/src/Sender.cs index 72252e4..9453498 100644 --- a/src/Sender.cs +++ b/src/Sender.cs @@ -17,7 +17,6 @@ namespace WorldOfPeacecraft this.Client = client; this.Buffer = buffer; this.SenderThread = new Thread(new ThreadStart(this.threadStart)); - SenderThread.Start(); } public void Send (String message) @@ -34,6 +33,11 @@ namespace WorldOfPeacecraft } } + public void Start() + { + SenderThread.Start(); + } + public void Stop() { SenderThread.Abort();