[英]How to implement threading in Xamarin.Android?
我试图在100ms处发送/发布,并且消息看起来像这样xxxxxxxxxx,所以每隔100ms左右就会调用一次。 我的问题是,我认为这还不够快(例如,如果当前订阅尚未完成,而另一个订阅正在被调用/正在发布消息)
我在想如何继续填充列表,同时用Oxyplot绘制图表。 我可以为此使用线程吗?
var x = 0;
channel.Subscribe(message =>
{
this.RunOnUiThread(() =>
{
var sample = message.Data;
byte[] data = (byte[])sample;
var data1 = System.Text.Encoding.ASCII.GetString(data);
var splitData = data1.Split('-');
foreach(string s in splitData) //Contains 10
{
double y = double.Parse(s);
y /= 100;
series1.Points.Add(new DataPoint(x, y));
MyModel.InvalidatePlot(true);
x++;
}
if (x >= xaxis.Maximum)
{
xaxis.Pan(xaxis.Transform(-1 + xaxis.Offset));
}
});
});
确保最短执行时间进入实时编程 。 在智能手机OS上使用某个应用程序,您与我想象的差不多。 唯一“关闭”的东西是任何解释的语言(PHP,Python)。
您唯一可以做的就是定义两次发射之间的最短时间。 我曾经写过一些示例代码,用于在备用线程中执行此操作。 基本的限速代码:
integer interval = 20;
DateTime dueTime = DateTime.Now.AddMillisconds(interval);
while(true){
if(DateTime.Now >= dueTime){
//insert code here
//Update next dueTime
dueTime = DateTime.Now.AddMillisconds(interval);
}
else{
//Just yield to not tax out the CPU
Thread.Sleep(1);
}
}
请注意,DateTime.Now仅每18毫秒返回一次新内容,因此小于20的任何内容都将太少。
如果您认为您无法承受最短的时间,则可能需要阅读Speed Rant 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.