Files
mirror-processhacker/trunk/ProcessHacker/Providers/Internal/SharedThreadProvider.cs
T
wj32 0828d11c96 implemented a shared thread for providers - less memory usage for process properties
git-svn-id: svn://svn.code.sf.net/p/processhacker/code@921 21ef857c-d57f-4fe0-8362-d861dc6d29cd
2009-03-26 07:37:08 +00:00

48 lines
1.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace ProcessHacker
{
internal class SharedThreadProvider
{
private List<IProvider> _providers = new List<IProvider>();
private Thread _thread;
private int _interval;
public SharedThreadProvider(int interval)
{
_interval = interval;
_thread = new Thread(new ThreadStart(this.Update));
_thread.SetApartmentState(ApartmentState.STA);
_thread.Start();
_thread.Priority = ThreadPriority.Lowest;
}
public void Add(IProvider provider)
{
provider.CreateThread = false;
_providers.Add(provider);
}
public void Remove(IProvider provider)
{
_providers.Remove(provider);
provider.CreateThread = true;
}
private void Update()
{
while (true)
{
foreach (var provider in _providers)
if (provider.Enabled)
provider.RunOnce();
Thread.Sleep(_interval);
}
}
}
}