我在一个使用Easyhook的进程中注入了一个DLL,我可以使用Marshal.ReadByte在特定的内存位置读取一个字节。
现在我希望在该字节发生变化时收到通知。当我想尽快发现变化时,您认为最好的方法是什么?
答案 0 :(得分:1)
不幸的是,除非你能够挂钩修改有问题的内存的函数调用,告诉你外部进程何时执行了更改,你最好的选择是创建一个只旋转并检查内存的线程并为了一个新的价值。
我建议不要尽快制作#34;"因为这会耗费大量的CPU,你需要问自己"改变之间的最长延迟是什么?我得到了可接受的通知"。例如,如果你的回答是" 0.1秒"您的池循环看起来像
private void PoolingLoop()
{
var lastValue = Marshal.ReadByte(_location)
while(_running)
{
Thread.Sleep(100);
var newValue = Marshal.ReadByte(_location);
if(lastValue != newValue)
DoThisOnMemoryChanged();
lastValue = newValue;
}
}