| | |
| | | IMessageEventSink sink;
|
| | | DebugClient client;
|
| | | int nextRequestSeq = 0;
|
| | | Dictionary<int, PendingRequest> pendingRequests = new Dictionary<int, PendingRequest>();
|
| | | readonly Dictionary<int, PendingRequest> pendingRequests = new Dictionary<int, PendingRequest>();
|
| | | Task eventHandlingThread;
|
| | | EventWaitHandle eventReceived = new EventWaitHandle(false, EventResetMode.AutoReset);
|
| | | ConcurrentQueue<Event> eventQueue = new ConcurrentQueue<Event>();
|
| | | readonly EventWaitHandle eventReceived = new EventWaitHandle(false, EventResetMode.AutoReset);
|
| | | readonly ConcurrentQueue<Event> eventQueue = new ConcurrentQueue<Event>();
|
| | |
|
| | | public uint? ThreadId { get { return client.ThreadId; } }
|
| | |
|
| | |
| | | protected override void DisposeFinally()
|
| | | {
|
| | | eventReceived.Set();
|
| | | eventHandlingThread.Wait();
|
| | | QtVsToolsPackage.Instance.JoinableTaskFactory.Run(
|
| | | async () => await Task.WhenAll(new[] { eventHandlingThread }));
|
| | | eventReceived.Dispose();
|
| | | }
|
| | |
|
| | |
| | | {
|
| | | while (!Disposing) {
|
| | | eventReceived.WaitOne();
|
| | | Event evt;
|
| | | while (!Disposing && eventQueue.TryDequeue(out evt))
|
| | | while (!Disposing && eventQueue.TryDequeue(out Event evt))
|
| | | sink.NotifyEvent(evt);
|
| | | }
|
| | | }
|
| | |
| | |
|
| | | public class PendingRequest : Finalizable
|
| | | {
|
| | | public Request Request { get; private set; }
|
| | | EventWaitHandle responded;
|
| | | public Request Request { get; }
|
| | | readonly EventWaitHandle responded;
|
| | |
|
| | | public PendingRequest()
|
| | | {
|