【发布时间】:2018-10-13 03:13:19
【问题描述】:
我正在使用 SharpDX 制作一个 GUI 界面和相关代码以允许控制鼠标光标/模拟按键但即使在空闲时我的应用程序使用 15%+ cpu 到它增加我的 CPU 温度 +10C 而我的应用程序正在运行,这是控制器更新循环在其自己的线程中运行:
private void CallToChildThread()
{
Program.stateOld = controller.GetState();
while (controller.IsConnected)
{
Program.stateNew = controller.GetState();
CheckButtons();
Point cursor;
GetCursorPos(out cursor);
short tx;
short ty;
tx = Program.stateNew.Gamepad.LeftThumbX;
ty = Program.stateNew.Gamepad.LeftThumbY;
float x = cursor.X + _xRest;
float y = cursor.Y + _yRest;
float dx = 0;
float dy = 0;
// Handle dead zone
float lengthsq = tx * tx + ty * ty;
if (lengthsq > DEAD_ZONE * DEAD_ZONE)
{
float mult = speed * getMult(lengthsq, DEAD_ZONE, acceleration_factor);
dx = getDelta(tx) * mult;
dy = getDelta(ty) * mult;
}
x += dx;
_xRest = x - (int)x;
y -= dy;
_yRest = y - (int)y;
SetCursorPos((int)x, (int)y);
Program.stateOld = Program.stateNew;
}
}
CheckButtons 只是我用来检查按下了哪些按钮的函数,我尝试在控制器更新线程中运行它,但我无法让按钮按预期执行。
while() 和 GetCursorPos 对总 CPU 使用率的贡献最大。我尝试比较数据包编号,以便在不使用控制器时我的应用程序处于空闲状态,但这会导致处理光标位置出现重大问题(它非常缓慢且断断续续)
编辑:我已将线程设置为后台,并将其优先级设置为低于正常,但这并没有显着提高 CPU 使用率
【问题讨论】:
-
是的,这是任务管理器的快照:i.imgur.com/NDvTEkl.png 关闭线程将 CPU 使用率降低到 0%
标签: c# multithreading sharpdx