mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-08 10:44:23 -04:00
adjust process throttle
This commit is contained in:
parent
f3159f3fef
commit
12ba57d423
@ -116,6 +116,7 @@ namespace MediaBrowser.Api.Playback.Hls
|
|||||||
|
|
||||||
if (File.Exists(segmentPath))
|
if (File.Exists(segmentPath))
|
||||||
{
|
{
|
||||||
|
job = ApiEntryPoint.Instance.GetTranscodingJob(playlistPath, TranscodingJobType);
|
||||||
return await GetSegmentResult(playlistPath, segmentPath, index, segmentLength, job, cancellationToken).ConfigureAwait(false);
|
return await GetSegmentResult(playlistPath, segmentPath, index, segmentLength, job, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,6 +125,7 @@ namespace MediaBrowser.Api.Playback.Hls
|
|||||||
{
|
{
|
||||||
if (File.Exists(segmentPath))
|
if (File.Exists(segmentPath))
|
||||||
{
|
{
|
||||||
|
job = ApiEntryPoint.Instance.GetTranscodingJob(playlistPath, TranscodingJobType);
|
||||||
return await GetSegmentResult(playlistPath, segmentPath, index, segmentLength, job, cancellationToken).ConfigureAwait(false);
|
return await GetSegmentResult(playlistPath, segmentPath, index, segmentLength, job, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -113,6 +113,7 @@
|
|||||||
<Compile Include="Native\Standby.cs" />
|
<Compile Include="Native\Standby.cs" />
|
||||||
<Compile Include="Native\ServerAuthorization.cs" />
|
<Compile Include="Native\ServerAuthorization.cs" />
|
||||||
<Compile Include="Native\WindowsApp.cs" />
|
<Compile Include="Native\WindowsApp.cs" />
|
||||||
|
<Compile Include="Native\WindowsProcessManager.cs" />
|
||||||
<Compile Include="Networking\CertificateGenerator.cs" />
|
<Compile Include="Networking\CertificateGenerator.cs" />
|
||||||
<Compile Include="Networking\NativeMethods.cs" />
|
<Compile Include="Networking\NativeMethods.cs" />
|
||||||
<Compile Include="Networking\NetworkManager.cs" />
|
<Compile Include="Networking\NetworkManager.cs" />
|
||||||
|
@ -114,7 +114,7 @@ namespace MediaBrowser.ServerApplication.Native
|
|||||||
|
|
||||||
public IProcessManager GetProcessManager()
|
public IProcessManager GetProcessManager()
|
||||||
{
|
{
|
||||||
return new ProcessManager();
|
return new WindowsProcessManager();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,78 @@
|
|||||||
|
using MediaBrowser.Controller.Diagnostics;
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
|
{
|
||||||
|
public class WindowsProcessManager : IProcessManager
|
||||||
|
{
|
||||||
|
public void SuspendProcess(Process process)
|
||||||
|
{
|
||||||
|
process.Suspend();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ResumeProcess(Process process)
|
||||||
|
{
|
||||||
|
process.Resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool SupportsSuspension
|
||||||
|
{
|
||||||
|
get { return true; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ProcessExtension
|
||||||
|
{
|
||||||
|
[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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static void Print(this Process process)
|
||||||
|
{
|
||||||
|
Console.WriteLine("{0,8} {1}", process.Id, process.ProcessName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[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)
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user