public void DoWork() { Completed = false; Started = true; string uid = CFunctions.GenerateUID(); string starttime = CFunctions.GetDateTime(0); Log.Write("[Threading] Starting thread (" + uid + ") to generate database output to " + Outfile.ToLower(), Log.Verbosity.Everything); CThread.Types threadtype = new CThread.Types(CThread.Types.Unmanaged); CDatabaseExporter de = new CDatabaseExporter(); CThread exporter = new CThread() { Type = threadtype, Worker = new Thread(delegate() { de.Export(this, ref _DBConn, DiscoveredSites, DiscoveredServers); }), Id = uid }; Core.ThreadManager.Add(exporter); }
private void QueryManager() { for (int i = 0; i < Session.Queries.Count; i++) { if (!Session.Queries[i].Started) { string tid = CFunctions.GenerateUID(); int id = i; // using local context variable to allow delegation Log.Write("[Threading] Starting thread (" + tid + ") to run session query " + (i + 1) + "/" + Session.Queries.Count + " (" + Session.Queries[i].Id + ").", Log.Verbosity.Everything); CThread.Types threadtype = new CThread.Types(CThread.Types.Unmanaged); if ((Server.Type == CServiceType.ESXServer) || (Server.Type == CServiceType.VCenterServer)) { threadtype = new CThread.Types(CThread.Types.VMware); } if ((Server.Type == CServiceType.SCVMMServer) || (Server.Type == CServiceType.HYVServer)) { threadtype = new CThread.Types(CThread.Types.HyperV); } Core.ThreadManager.Add(new CThread() { Type = threadtype, Worker = new Thread(delegate() { DoQuery(id); }), Session = this, Id = tid }); } } do { bool status = true; for (int i = 0; i < Session.Queries.Count; i++) { if (!Session.Queries[i].Completed) { status = false; } } Session.Completed = status; Thread.Sleep(COptions.Session_Thread_Wait); } while (!Session.Completed); }