Mercurial > defical
diff defical-sharp/defical-cli/threader-backtrack.cs @ 0:ebed2bd0d300
Initial import from svn. History be damned.
author | Edho P. Arief <me@myconan.net> |
---|---|
date | Fri, 02 Apr 2010 23:11:57 +0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/defical-sharp/defical-cli/threader-backtrack.cs Fri Apr 02 23:11:57 2010 +0700 @@ -0,0 +1,103 @@ +using System; +using System.Threading; +using System.IO; +using libbacktrack; + +namespace defical_cli +{ + public partial class Program + { + private partial class main + { + private void goBT() + { + this.isProcessing = true; + this.result = ""; + Thread[] threads = new Thread[this.numThreads]; + int start; + int end = 0; + for (int i = 0; i < this.numThreads; i++) + { + threads[i] = new Thread(goThreadBT); + threads[i].IsBackground = true; + threads[i].Priority = ThreadPriority.Lowest; + start = end + 1; + end = start + ((this.numVer + this.numDef + 1) / 2) / this.numThreads; + if (i == this.numThreads - 1) + end = (this.numVer + this.numDef + 1) / 2; + threads[i].Start(new int[] { start, end, i }); + } + while (this.isProcessing) + { + Thread.Sleep(100); + bool threadsIsProcessing = false; + for (int i = 0; i < this.numThreads; i++) + { + if (threads[i].IsAlive) + { + threadsIsProcessing = true; + } + } + this.isProcessing = threadsIsProcessing; + } + if (this.result == "") { this.result = "SEMT labeling can't be constructed."; } + Console.WriteLine(this.result); + this.isProcessing = false; + for (int i = 0; i < this.numThreads; i++) + { + if (threads[i].IsAlive) + { + threads[i].Abort(); + } + } + + } + private void goThreadBT(object o) + { + int[] args = o as int[]; + int start = args[0]; + int end = args[1]; + int threadID = args[2]; + for (int i = start; i <= end; i++) + { + //if (this.isProcessing) + { + Backtrack todo = new Backtrack(this.graphType, this.numVer, this.numDef, i, true); + todo.Walk(); + if (this.isProcessing) + { + if (todo.IsSemt) + { + //this.isProcessing = false; + Console.Write("{0}",todo.Result); + this.result = todo.Result; + /*string filename = "log-" + + this.graphType + "-" + + "numver=" + this.numVer.ToString() + "-" + + "numdef=" + this.numDef.ToString() + "-" + + DateTime.UtcNow.ToString("yyyyMMdd_hhmmss"); + string filepath = getHomeDir() + filename; + int n = 1; + while (File.Exists(filepath + ".txt")) + { + if (!File.Exists(filepath + "-" + n.ToString() + ".txt")) + { + filepath += "-" + n.ToString(); + break; + } + n++; + } + WriteToFile(filepath + ".txt", this.result);*/ + //break; + } + else + { + Console.WriteLine("[404] SEMT labeling not found for first label of {0}", i); + } + } + } + } + } + } + } +} \ No newline at end of file