#c# #infinite-loop #waithandle
Вопрос:
Этот код использует много процессора с момента его бесконечного цикла, как я могу остановить его от цикла, когда он просто простаивает и активируется только при нажатии левой и правой кнопок мыши. Я читал о событии waithandle, но не знаю, куда его поместить в свой код. Пытался и потерпел неудачу.
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace test
{
public static class Anti //does something
{
public static void Run()
{
var R1 = new Random(Guid.NewGuid().GetHashCode());
while (true)
{
try
{
if (Main.CEnabled)
{
if (InputHandler.IsKeyDown(Keys.LButton) amp;amp; InputHandler.IsKeyDown(Keys.RButton))
{
switch (Main.CurrentWeapon.Mode)
{
case FiringMode.Automatic:
if (InputHandler.IsKeyDown(Keys.LButton) amp;amp; InputHandler.IsKeyDown(Keys.RButton))
{
}
else if (InputHandler.IsKeyDown(Keys.LButton) amp;amp; InputHandler.IsKeyDown(Keys.RButton) amp;amp; InputHandler.IsKeyDown((Keys)162))
{
Console.WriteLine("Success");
}
break;
default:
break;
}
}
}
}
catch { }
}
}
}
}
Комментарии:
1. Что такое
InputHandler
?2.
if(idle) { Thread.Sleep(0); continue; }
в начале цикла может быть достаточно хорошо.3. @Sinatr это иногда приводит к тому, что программа перестает отвечать на запросы.
4. Спящий режим обеспечит переключение на другие потоки и снижение нагрузки на процессор. Если что-то не отвечает, значит, это связано с чем-то другим.
5. Что вы на самом деле пытаетесь сделать? Похоже, вы проводите опрос на предмет изменений при вводе ключа, и это просто не очень хороший способ сделать это. Существуют ключевые события, которые вы должны иметь возможность использовать, которые информируют вас при нажатии кнопки.