Added pausing/resuming for interpolation, async (background) web checks

This commit is contained in:
N00MKRAD
2021-04-29 22:57:00 +02:00
parent abc9817c66
commit d64e81c866
17 changed files with 332 additions and 46 deletions

View File

@@ -0,0 +1,61 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using Win32Interop;
namespace Flowframes.Extensions
{
public static class ProcessExtensions
{
[Flags]
public enum ThreadAccess : int
{
TERMINATE = (0x0001),
SUSPEND_RESUME = (0x0002),
GET_CONTEXT = (0x0008),
SET_CONTEXT = (0x0010),
SET_INFORMATION = (0x0020),
QUERY_INFORMATION = (0x0040),
SET_THREAD_TOKEN = (0x0080),
IMPERSONATE = (0x0100),
DIRECT_IMPERSONATION = (0x0200)
}
[DllImport("kernel32.dll")]
static extern IntPtr OpenThread(ThreadAccess dwDesiredAccess, bool bInheritHandle, uint dwThreadId);
[DllImport("kernel32.dll")]
static extern uint SuspendThread(IntPtr hThread);
[DllImport("kernel32.dll")]
static extern int ResumeThread(IntPtr hThread);
public static void Suspend(this Process process)
{
foreach (ProcessThread thread in process.Threads)
{
var pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)thread.Id);
if (pOpenThread == IntPtr.Zero)
break;
SuspendThread(pOpenThread);
}
}
public static void Resume(this Process process)
{
foreach (ProcessThread thread in process.Threads)
{
var pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)thread.Id);
if (pOpenThread == IntPtr.Zero)
break;
ResumeThread(pOpenThread);
}
}
}
}

View File

@@ -329,6 +329,7 @@
<Compile Include="Data\PseudoUniqueFile.cs" /> <Compile Include="Data\PseudoUniqueFile.cs" />
<Compile Include="Data\ResumeState.cs" /> <Compile Include="Data\ResumeState.cs" />
<Compile Include="Data\SubtitleTrack.cs" /> <Compile Include="Data\SubtitleTrack.cs" />
<Compile Include="Extensions\ProcessExtensions.cs" />
<Compile Include="Forms\BatchForm.cs"> <Compile Include="Forms\BatchForm.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
@@ -377,7 +378,7 @@
<Compile Include="MiscUtils\Benchmarker.cs" /> <Compile Include="MiscUtils\Benchmarker.cs" />
<Compile Include="MiscUtils\FrameRename.cs" /> <Compile Include="MiscUtils\FrameRename.cs" />
<Compile Include="OS\AiProcess.cs" /> <Compile Include="OS\AiProcess.cs" />
<Compile Include="ExtensionMethods.cs" /> <Compile Include="Extensions\ExtensionMethods.cs" />
<Compile Include="Form1.cs"> <Compile Include="Form1.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
@@ -392,6 +393,7 @@
<Compile Include="IO\Logger.cs" /> <Compile Include="IO\Logger.cs" />
<Compile Include="Magick\Converter.cs" /> <Compile Include="Magick\Converter.cs" />
<Compile Include="Magick\Dedupe.cs" /> <Compile Include="Magick\Dedupe.cs" />
<Compile Include="OS\AiProcessSuspend.cs" />
<Compile Include="OS\NvApi.cs" /> <Compile Include="OS\NvApi.cs" />
<Compile Include="OS\OSUtils.cs" /> <Compile Include="OS\OSUtils.cs" />
<Compile Include="OS\Python.cs" /> <Compile Include="OS\Python.cs" />
@@ -461,6 +463,9 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="FlowframesLogo2021.ico" /> <Content Include="FlowframesLogo2021.ico" />
<None Include="Resources\baseline_play_arrow_white_48dp.png" />
<None Include="Resources\baseline_pause_white_48dp.png" />
<None Include="Resources\baseline_stop_white_48dp.png" />
<None Include="Resources\devmode.bat" /> <None Include="Resources\devmode.bat" />
<None Include="Resources\flowframesIcoNew-512px.png" /> <None Include="Resources\flowframesIcoNew-512px.png" />
<None Include="Resources\flowframesIcoNew.png" /> <None Include="Resources\flowframesIcoNew.png" />

87
Code/Form1.Designer.cs generated
View File

@@ -78,7 +78,6 @@
this.panel14 = new System.Windows.Forms.Panel(); this.panel14 = new System.Windows.Forms.Panel();
this.panel3 = new System.Windows.Forms.Panel(); this.panel3 = new System.Windows.Forms.Panel();
this.longProgBar = new HTAlt.WinForms.HTProgressBar(); this.longProgBar = new HTAlt.WinForms.HTProgressBar();
this.cancelBtn = new System.Windows.Forms.Button();
this.mainTabControl = new HTAlt.WinForms.HTTabControl(); this.mainTabControl = new HTAlt.WinForms.HTTabControl();
this.welcomeTab = new System.Windows.Forms.TabPage(); this.welcomeTab = new System.Windows.Forms.TabPage();
this.welcomeLabel2 = new System.Windows.Forms.Label(); this.welcomeLabel2 = new System.Windows.Forms.Label();
@@ -125,6 +124,10 @@
this.htButton1 = new HTAlt.WinForms.HTButton(); this.htButton1 = new HTAlt.WinForms.HTButton();
this.runStepBtn = new System.Windows.Forms.Button(); this.runStepBtn = new System.Windows.Forms.Button();
this.stepSelector = new System.Windows.Forms.ComboBox(); this.stepSelector = new System.Windows.Forms.ComboBox();
this.busyControlsPanel = new System.Windows.Forms.Panel();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.cancelBtn = new System.Windows.Forms.Button();
this.pauseBtn = new System.Windows.Forms.Button();
this.panel1.SuspendLayout(); this.panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
@@ -145,6 +148,8 @@
this.previewTab.SuspendLayout(); this.previewTab.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.previewPicturebox)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.previewPicturebox)).BeginInit();
this.abtTab.SuspendLayout(); this.abtTab.SuspendLayout();
this.busyControlsPanel.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
// titleLabel // titleLabel
@@ -734,21 +739,6 @@
this.longProgBar.Size = new System.Drawing.Size(700, 15); this.longProgBar.Size = new System.Drawing.Size(700, 15);
this.longProgBar.TabIndex = 33; this.longProgBar.TabIndex = 33;
// //
// cancelBtn
//
this.cancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.cancelBtn.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.cancelBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cancelBtn.ForeColor = System.Drawing.Color.LightCoral;
this.cancelBtn.Location = new System.Drawing.Point(12, 418);
this.cancelBtn.Name = "cancelBtn";
this.cancelBtn.Size = new System.Drawing.Size(203, 71);
this.cancelBtn.TabIndex = 34;
this.cancelBtn.Text = "Cancel";
this.cancelBtn.UseVisualStyleBackColor = false;
this.cancelBtn.Visible = false;
this.cancelBtn.Click += new System.EventHandler(this.cancelBtn_Click);
//
// mainTabControl // mainTabControl
// //
this.mainTabControl.AllowDrop = true; this.mainTabControl.AllowDrop = true;
@@ -1447,6 +1437,62 @@
this.stepSelector.Size = new System.Drawing.Size(203, 24); this.stepSelector.Size = new System.Drawing.Size(203, 24);
this.stepSelector.TabIndex = 73; this.stepSelector.TabIndex = 73;
// //
// busyControlsPanel
//
this.busyControlsPanel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.busyControlsPanel.Controls.Add(this.tableLayoutPanel1);
this.busyControlsPanel.Location = new System.Drawing.Point(12, 418);
this.busyControlsPanel.Name = "busyControlsPanel";
this.busyControlsPanel.Size = new System.Drawing.Size(203, 71);
this.busyControlsPanel.TabIndex = 74;
this.busyControlsPanel.Visible = false;
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 2;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 49F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 51F));
this.tableLayoutPanel1.Controls.Add(this.pauseBtn, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.cancelBtn, 0, 0);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 1;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(203, 71);
this.tableLayoutPanel1.TabIndex = 0;
//
// cancelBtn
//
this.cancelBtn.Anchor = System.Windows.Forms.AnchorStyles.None;
this.cancelBtn.BackgroundImage = global::Flowframes.Properties.Resources.baseline_stop_white_48dp;
this.cancelBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
this.cancelBtn.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Firebrick;
this.cancelBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cancelBtn.ForeColor = System.Drawing.Color.Firebrick;
this.cancelBtn.Location = new System.Drawing.Point(24, 10);
this.cancelBtn.Name = "cancelBtn";
this.cancelBtn.Size = new System.Drawing.Size(50, 50);
this.cancelBtn.TabIndex = 0;
this.cancelBtn.UseVisualStyleBackColor = true;
this.cancelBtn.Click += new System.EventHandler(this.cancelBtn_Click);
//
// pauseBtn
//
this.pauseBtn.Anchor = System.Windows.Forms.AnchorStyles.None;
this.pauseBtn.BackgroundImage = global::Flowframes.Properties.Resources.baseline_pause_white_48dp;
this.pauseBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
this.pauseBtn.FlatAppearance.MouseOverBackColor = System.Drawing.Color.DarkOrange;
this.pauseBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.pauseBtn.ForeColor = System.Drawing.Color.DarkOrange;
this.pauseBtn.Location = new System.Drawing.Point(126, 10);
this.pauseBtn.Name = "pauseBtn";
this.pauseBtn.Size = new System.Drawing.Size(50, 50);
this.pauseBtn.TabIndex = 1;
this.pauseBtn.UseVisualStyleBackColor = true;
this.pauseBtn.Visible = false;
this.pauseBtn.Click += new System.EventHandler(this.pauseBtn_Click);
//
// Form1 // Form1
// //
this.AllowDrop = true; this.AllowDrop = true;
@@ -1454,7 +1500,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32)))));
this.ClientSize = new System.Drawing.Size(934, 501); this.ClientSize = new System.Drawing.Size(934, 501);
this.Controls.Add(this.cancelBtn); this.Controls.Add(this.busyControlsPanel);
this.Controls.Add(this.runBtn); this.Controls.Add(this.runBtn);
this.Controls.Add(this.stepSelector); this.Controls.Add(this.stepSelector);
this.Controls.Add(this.runStepBtn); this.Controls.Add(this.runStepBtn);
@@ -1510,6 +1556,8 @@
this.previewTab.PerformLayout(); this.previewTab.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.previewPicturebox)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.previewPicturebox)).EndInit();
this.abtTab.ResumeLayout(false); this.abtTab.ResumeLayout(false);
this.busyControlsPanel.ResumeLayout(false);
this.tableLayoutPanel1.ResumeLayout(false);
this.ResumeLayout(false); this.ResumeLayout(false);
this.PerformLayout(); this.PerformLayout();
@@ -1556,7 +1604,6 @@
private System.Windows.Forms.PictureBox pictureBox3; private System.Windows.Forms.PictureBox pictureBox3;
private System.Windows.Forms.Label label23; private System.Windows.Forms.Label label23;
private HTAlt.WinForms.HTProgressBar longProgBar; private HTAlt.WinForms.HTProgressBar longProgBar;
private System.Windows.Forms.Button cancelBtn;
private HTAlt.WinForms.HTButton discordBtn; private HTAlt.WinForms.HTButton discordBtn;
private HTAlt.WinForms.HTButton paypalBtn; private HTAlt.WinForms.HTButton paypalBtn;
private HTAlt.WinForms.HTButton patreonBtn; private HTAlt.WinForms.HTButton patreonBtn;
@@ -1612,6 +1659,10 @@
private System.Windows.Forms.ComboBox mpdecimateMode; private System.Windows.Forms.ComboBox mpdecimateMode;
private System.Windows.Forms.LinkLabel linkLabel1; private System.Windows.Forms.LinkLabel linkLabel1;
private HTAlt.WinForms.HTButton scnDetectTestBtn; private HTAlt.WinForms.HTButton scnDetectTestBtn;
private System.Windows.Forms.Panel busyControlsPanel;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Button pauseBtn;
private System.Windows.Forms.Button cancelBtn;
} }
} }

View File

@@ -68,13 +68,14 @@ namespace Flowframes
{ {
try try
{ {
await Task.Delay(100); //await Task.Delay(100);
await StartupChecks.SymlinksCheck(); Task.Run(() => Updater.UpdateModelList());
await Updater.UpdateModelList(); // Update AI model list Task.Run(() => Updater.AsyncUpdateCheck());
await Updater.AsyncUpdateCheck(); // Check for Flowframes updates Task.Run(() => GetWebInfo.LoadNews(newsLabel));
await GetWebInfo.LoadNews(newsLabel); // Loads news/MOTD Task.Run(() => GetWebInfo.LoadPatronListCsv(patronsLabel));
await GetWebInfo.LoadPatronListCsv(patronsLabel); // Load patron list
await Python.CheckCompression(); await Python.CheckCompression();
await StartupChecks.SymlinksCheck();
} }
catch (Exception e) catch (Exception e)
{ {
@@ -106,6 +107,7 @@ namespace Flowframes
public HTTabControl GetMainTabControl() { return mainTabControl; } public HTTabControl GetMainTabControl() { return mainTabControl; }
public TextBox GetInputFpsTextbox () { return fpsInTbox; } public TextBox GetInputFpsTextbox () { return fpsInTbox; }
public Button GetPauseBtn() { return pauseBtn; }
public bool IsInFocus() { return (ActiveForm == this); } public bool IsInFocus() { return (ActiveForm == this); }
@@ -223,6 +225,7 @@ namespace Flowframes
if (!BatchProcessing.busy) // Don't load values from gui if batch processing is used if (!BatchProcessing.busy) // Don't load values from gui if batch processing is used
Interpolate.current = GetCurrentSettings(); Interpolate.current = GetCurrentSettings();
AiProcessSuspend.Reset();
Interpolate.Start(); Interpolate.Start();
} }
@@ -324,12 +327,15 @@ namespace Flowframes
Control[] controlsToDisable = new Control[] { runBtn, runStepBtn, stepSelector, settingsBtn }; Control[] controlsToDisable = new Control[] { runBtn, runStepBtn, stepSelector, settingsBtn };
Control[] controlsToHide = new Control[] { runBtn, runStepBtn, stepSelector }; Control[] controlsToHide = new Control[] { runBtn, runStepBtn, stepSelector };
progressCircle.Visible = state; progressCircle.Visible = state;
cancelBtn.Visible = state; busyControlsPanel.Visible = state;
foreach (Control c in controlsToDisable) foreach (Control c in controlsToDisable)
c.Enabled = !state; c.Enabled = !state;
foreach (Control c in controlsToHide) foreach (Control c in controlsToHide)
c.Visible = !state; c.Visible = !state;
cancelBtn.Enabled = allowCancel;
busyControlsPanel.Enabled = allowCancel;
Program.busy = state; Program.busy = state;
Program.mainForm.UpdateStepByStepControls(); Program.mainForm.UpdateStepByStepControls();
} }
@@ -398,10 +404,15 @@ namespace Flowframes
} }
private void cancelBtn_Click(object sender, EventArgs e) private void cancelBtn_Click(object sender, EventArgs e)
{
DialogResult dialog = MessageBox.Show($"Are you sure you want to cancel the interpolation?", "Are you sure?", MessageBoxButtons.YesNo);
if (dialog == DialogResult.Yes)
{ {
SetTab("interpolation"); SetTab("interpolation");
Interpolate.Cancel(); Interpolate.Cancel();
} }
}
private void discordBtn_Click(object sender, EventArgs e) private void discordBtn_Click(object sender, EventArgs e)
{ {
@@ -550,5 +561,10 @@ namespace Flowframes
{ {
Magick.SceneDetect.RunSceneDetection(inputTbox.Text.Trim()); Magick.SceneDetect.RunSceneDetection(inputTbox.Text.Trim());
} }
private void pauseBtn_Click(object sender, EventArgs e)
{
AiProcessSuspend.SuspendResumeAi(!AiProcessSuspend.aiProcFrozen);
}
} }
} }

View File

@@ -747,7 +747,7 @@ namespace Flowframes.IO
} }
catch (Exception e) catch (Exception e)
{ {
Logger.Log($"OverwriteWithText failed for '{path}': {e.Message}"); Logger.Log($"OverwriteWithText failed for '{path}': {e.Message}", true);
} }
} }

View File

@@ -1,20 +1,15 @@
using Flowframes.IO; using Flowframes.IO;
using System; using System;
using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Flowframes.OS; using Flowframes.OS;
using Flowframes.UI; using Flowframes.UI;
using Flowframes.Main; using Flowframes.Main;
using Flowframes.Data; using Flowframes.Data;
using Flowframes.MiscUtils; using Flowframes.MiscUtils;
using Flowframes.Magick;
using Flowframes.Media; using Flowframes.Media;
using System.Drawing;
namespace Flowframes namespace Flowframes
{ {
@@ -35,6 +30,7 @@ namespace Flowframes
try try
{ {
AiProcessSuspend.SetRunning(false);
OSUtils.KillProcessTree(lastAiProcess.Id); OSUtils.KillProcessTree(lastAiProcess.Id);
} }
catch (Exception e) catch (Exception e)
@@ -48,13 +44,14 @@ namespace Flowframes
lastStartupTimeMs = startupTimeMs; lastStartupTimeMs = startupTimeMs;
processTime.Restart(); processTime.Restart();
lastAiProcess = proc; lastAiProcess = proc;
AiProcessSuspend.SetRunning(true);
lastInPath = string.IsNullOrWhiteSpace(inPath) ? Interpolate.current.framesFolder : inPath; lastInPath = string.IsNullOrWhiteSpace(inPath) ? Interpolate.current.framesFolder : inPath;
hasShownError = false; hasShownError = false;
} }
static void SetProgressCheck(string interpPath, float factor) static void SetProgressCheck(string interpPath, float factor)
{ {
int frames = IOUtils.GetAmountOfFiles(lastInPath, false, "*.*"); int frames = IOUtils.GetAmountOfFiles(lastInPath, false);
int target = ((frames * factor) - (factor - 1)).RoundToInt(); int target = ((frames * factor) - (factor - 1)).RoundToInt();
InterpolationProgress.progressPaused = false; InterpolationProgress.progressPaused = false;
InterpolationProgress.currentFactor = factor; InterpolationProgress.currentFactor = factor;
@@ -69,6 +66,7 @@ namespace Flowframes
{ {
if (Interpolate.canceled) return; if (Interpolate.canceled) return;
Program.mainForm.SetProgress(100); Program.mainForm.SetProgress(100);
AiProcessSuspend.SetRunning(false);
InterpolationProgress.UpdateInterpProgress(IOUtils.GetAmountOfFiles(Interpolate.current.interpFolder, false, "*" + Interpolate.current.interpExt), InterpolationProgress.targetFrames); InterpolationProgress.UpdateInterpProgress(IOUtils.GetAmountOfFiles(Interpolate.current.interpFolder, false, "*" + Interpolate.current.interpExt), InterpolationProgress.targetFrames);
string logStr = $"Done running {aiName} - Interpolation took {FormatUtils.Time(processTime.Elapsed)}. Peak Output FPS: {InterpolationProgress.peakFpsOut.ToString("0.00")}"; string logStr = $"Done running {aiName} - Interpolation took {FormatUtils.Time(processTime.Elapsed)}. Peak Output FPS: {InterpolationProgress.peakFpsOut.ToString("0.00")}";

102
Code/OS/AiProcessSuspend.cs Normal file
View File

@@ -0,0 +1,102 @@
using Flowframes.Extensions;
using Flowframes.Properties;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
namespace Flowframes.OS
{
class AiProcessSuspend
{
public static bool aiProcFrozen;
static List<Process> suspendedProcesses = new List<Process>();
public static bool isRunning;
public static void Reset()
{
SetRunning(false);
SetPauseButtonStyle(false);
}
public static void SetRunning (bool running)
{
isRunning = running;
Program.mainForm.GetPauseBtn().Visible = running;
}
public static void SuspendResumeAi(bool freeze, bool excludeCmd = true)
{
if (AiProcess.lastAiProcess == null || AiProcess.lastAiProcess.HasExited)
return;
Process currProcess = AiProcess.lastAiProcess;
Logger.Log($"{(freeze ? "Suspending" : "Resuming")} main process ({currProcess.StartInfo.FileName} {currProcess.StartInfo.Arguments})", true);
if (freeze)
{
List<Process> procs = new List<Process>();
procs.Add(currProcess);
foreach (var subProc in OSUtils.GetChildProcesses(currProcess))
procs.Add(subProc);
aiProcFrozen = true;
SetPauseButtonStyle(true);
AiProcess.processTime.Stop();
foreach (Process process in procs)
{
if (process == null || process.HasExited)
continue;
if (excludeCmd && (process.ProcessName == "conhost" || process.ProcessName == "cmd"))
continue;
Logger.Log($"Suspending {process.ProcessName}", true);
process.Suspend();
suspendedProcesses.Add(process);
}
}
else
{
aiProcFrozen = false;
SetPauseButtonStyle(false);
AiProcess.processTime.Start();
foreach (Process process in new List<Process>(suspendedProcesses)) // We MUST clone the list here since we modify it in the loop!
{
if (process == null || process.HasExited)
continue;
Logger.Log($"Resuming {process.ProcessName}", true);
process.Resume();
suspendedProcesses.Remove(process);
}
}
}
public static void SetPauseButtonStyle (bool paused)
{
System.Windows.Forms.Button btn = Program.mainForm.GetPauseBtn();
if (paused)
{
btn.BackgroundImage = Resources.baseline_play_arrow_white_48dp;
btn.FlatAppearance.BorderColor = System.Drawing.Color.MediumSeaGreen;
btn.FlatAppearance.MouseOverBackColor = System.Drawing.Color.MediumSeaGreen;
}
else
{
btn.BackgroundImage = Resources.baseline_pause_white_48dp;
btn.FlatAppearance.BorderColor= System.Drawing.Color.DarkOrange;
btn.FlatAppearance.MouseOverBackColor = System.Drawing.Color.DarkOrange;
}
}
}
}

View File

@@ -11,6 +11,7 @@ using Flowframes.IO;
using DiskDetector; using DiskDetector;
using DiskDetector.Models; using DiskDetector.Models;
using Microsoft.VisualBasic.Devices; using Microsoft.VisualBasic.Devices;
using Flowframes.Extensions;
namespace Flowframes.OS namespace Flowframes.OS
{ {
@@ -124,7 +125,7 @@ namespace Flowframes.OS
return (Encoding.UTF8.GetByteCount(str) != str.Length); return (Encoding.UTF8.GetByteCount(str) != str.Length);
} }
public static int GetFreeRamMb () public static int GetFreeRamMb()
{ {
try try
{ {
@@ -155,5 +156,18 @@ namespace Flowframes.OS
return info; return info;
} }
public static IEnumerable<Process> GetChildProcesses(Process process)
{
List<Process> children = new List<Process>();
ManagementObjectSearcher mos = new ManagementObjectSearcher(String.Format("Select * From Win32_Process Where ParentProcessID={0}", process.Id));
foreach (ManagementObject mo in mos.Get())
{
children.Add(Process.GetProcessById(Convert.ToInt32(mo["ProcessID"])));
}
return children;
}
} }
} }

View File

@@ -120,6 +120,26 @@ namespace Flowframes.Properties {
} }
} }
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap baseline_pause_white_48dp {
get {
object obj = ResourceManager.GetObject("baseline_pause_white_48dp", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap baseline_play_arrow_white_48dp {
get {
object obj = ResourceManager.GetObject("baseline_play_arrow_white_48dp", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary> /// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap. /// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary> /// </summary>
@@ -140,6 +160,16 @@ namespace Flowframes.Properties {
} }
} }
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap baseline_stop_white_48dp {
get {
object obj = ResourceManager.GetObject("baseline_stop_white_48dp", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary> /// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap. /// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary> /// </summary>

View File

@@ -133,12 +133,12 @@
<data name="paypal256px" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="paypal256px" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\paypal256px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\paypal256px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="flowframesIcoNew_512px" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\flowframesIcoNew-512px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="baseline_system_update_alt_white_48dp" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="baseline_system_update_alt_white_48dp" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\baseline_system_update_alt_white_48dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\baseline_system_update_alt_white_48dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="patreon256px" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\patreon256px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="questmark-72px-bordeer" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="questmark-72px-bordeer" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\questmark-72px-bordeer.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\questmark-72px-bordeer.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
@@ -157,22 +157,31 @@
<data name="separatorTest1" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="separatorTest1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\separatorTest1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\separatorTest1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="baseline_stop_white_48dp" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\baseline_stop_white_48dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="devmode" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\devmode.bat;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
<data name="baseline_pause_white_48dp" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\baseline_pause_white_48dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="baseline_image_white_48dp" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="baseline_image_white_48dp" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\baseline_image_white_48dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\baseline_image_white_48dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="baseline_create_white_18dp-semiTransparent" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="baseline_create_white_18dp-semiTransparent" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\baseline_create_white_18dp-semiTransparent.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\baseline_create_white_18dp-semiTransparent.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="patreon256px" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\patreon256px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="baseline_settings_white_48dp" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="baseline_settings_white_48dp" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\baseline_settings_white_48dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\baseline_settings_white_48dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="baseline_image_white_48dp-4x-25pcAlpha" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="baseline_image_white_48dp-4x-25pcAlpha" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\baseline_image_white_48dp-4x-25pcAlpha.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\baseline_image_white_48dp-4x-25pcAlpha.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="flowframesIcoNew_512px" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="baseline_play_arrow_white_48dp" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\flowframesIcoNew-512px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\baseline_play_arrow_white_48dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="devmode" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\devmode.bat;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data> </data>
</root> </root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 B