1 //
2 // Copyright (c) 2010-2018 Antmicro
3 // Copyright (c) 2011-2015 Realtime Embedded
4 //
5 // This file is licensed under the MIT License.
6 // Full license text is available in 'licenses/MIT.txt'.
7 //
8 using System;
9 using System.Threading;
10 using Antmicro.Renode.Core;
11 
12 namespace Antmicro.Renode.UnitTests.Mocks
13 {
14     public class ActivelyAskingCPU : EmptyCPU
15     {
ActivelyAskingCPU(IMachine machine, ulong addressToAsk)16         public ActivelyAskingCPU(IMachine machine, ulong addressToAsk) : base(machine)
17         {
18             this.addressToAsk = addressToAsk;
19             tokenSource = new CancellationTokenSource();
20             finished = new ManualResetEventSlim();
21         }
22 
OnResume()23         protected override void OnResume()
24         {
25             finished.Reset();
26             new Thread(() => AskingThread(tokenSource.Token))
27             {
28                 IsBackground = true,
29                 Name = "AskingThread"
30             }.Start();
31         }
32 
OnPause()33         protected override void OnPause()
34         {
35             tokenSource.Cancel();
36             finished.Wait();
37         }
38 
AskingThread(CancellationToken token)39         private void AskingThread(CancellationToken token)
40         {
41             while(!token.IsCancellationRequested)
42             {
43                 machine.SystemBus.ReadDoubleWord(addressToAsk);
44             }
45             finished.Set();
46         }
47 
48         private CancellationTokenSource tokenSource;
49         private readonly ManualResetEventSlim finished;
50         private readonly ulong addressToAsk;
51     }
52 }
53 
54