"如果你能感觉到计算机每隔几毫秒切换几十个任务的操作,你肯定会同意计算机似乎同时执行这些任务,即使我们知道计算机正在交错计算各种任务"
那么在单核CPU上,单个原子操作不可能在同一系统内同时执行?
C#
sizeof(int*)
8
Run Code Online (Sandbox Code Playgroud)
C++
sizeof(int*)
4
Run Code Online (Sandbox Code Playgroud)
为什么是这样?C#中的sizeof也是8.在C++中它是4.
对不起,标题措辞不当......
我有一个名为 NGram 的对象
class NGram
{
//other properties
double Probability {get; set;} //Value between 1 and 0
}
Run Code Online (Sandbox Code Playgroud)
现在假设我有这些对象的列表,这样......
List<NGrams> grams = GetNGrams();
Debug.Assert(grams.Sum(x => x.Probability) == 1);
Run Code Online (Sandbox Code Playgroud)
如何在考虑概率分布的同时从此列表中选择随机项目。
例如,假设grams[0].Probability == 0.5应该有 50% 的机会选择grams[0]
我想我可能需要类似的东西, rand.NextDouble()但我不知所措。
Task t = new Task(() =>
{
//I would expect this to be on a worker thread, but it's not!
Thread.Sleep(1000);
});
Task test = new Task(() =>
{
Thread.Sleep(1000);
});
test.ContinueWith(x =>
{
//Do some UI Updates here, but also start another Task running.
t.Start();
}, TaskScheduler.FromCurrentSynchronizationContext());
test.Start();
Run Code Online (Sandbox Code Playgroud)
为什么t在UI线程上调用gets.据我所知,我创建了一个持续Task反对test其正确地被调用在UI线程上,但我然后开始一个新任务的运行.现在我知道我可以通过指定TaskScheduler.Default作为重载方法来解决这个问题t.Start,但是为什么Task在ui线程上开始新的?
看这里:
static void Main(string[] args)
{
test p = new test();
new Thread(() => p.SayHello("Thread One")).Start();
new Thread(() => p.SayHello("Thread Two")).Start();
}
Run Code Online (Sandbox Code Playgroud)
然后:
class test
{
public void SayHello(string data)
{
int i = 0;
while (i < 50)
{
Console.WriteLine("Hello from " + data);
i++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么第二个线程没有将变量重置i为0?搞乱它在第一个线程上运行的while循环?
我怎样才能获得画布的元素?
我有这个:
<Canvas x:Name="can" HorizontalAlignment="Left" Height="502" Margin="436,0,0,0" VerticalAlignment="Top" Width="336" OpacityMask="#FFC52D2D">
<Canvas.Background>
<SolidColorBrush Color="{DynamicResource {x:Static SystemColors.ActiveCaptionColorKey}}"/>
</Canvas.Background>
<Button x:Name="btn_twoThreads" Content="Two Threads" Height="32" Canvas.Left="195" Canvas.Top="460" Width="131" Click="btn_twoThreads_Click"/>
<Button x:Name="btn_oneThread" Content="One Thread" Height="32" Canvas.Left="10" Canvas.Top="460" Width="131" Click="btn_oneThread_Click"/>
<Rectangle Fill="#FFF4F4F5" Height="55" Canvas.Left="10" Stroke="Black" Canvas.Top="388" Width="316"/>
</Canvas>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,XAML代码中的这个画布上有一些对象.我需要获取Rectangle对象的详细信息:
Rectangle r;
r = can.Children[2] as Rectangle; //I know this probably doesn't retrieve the rectangle object, but hopefully you can see what I am trying to achieve.
if (r != null)
{
MessageBox.Show("It's a rectangle");
}
Run Code Online (Sandbox Code Playgroud)
我知道我可能只是通过在XAML中给它一个变量名来访问Rectangle对象,但是canvas对象是在各种类中绘制的,我不想将矩形传递给每个类,如果它已经是包含在画布中.