private void CreateThreadNState(ParserParagraph aParagraph, NThread aThread, string aNStateName, bool aCapturesWaitObject) { StringBuilder format = new StringBuilder("NThread @ %8x Pri %d NState " + aNStateName); // if (aCapturesWaitObject) { format.Append(" %8x"); } format.Append("\r\n"); // // string finalFormat = format.ToString(); NThread.TNThreadState state = NThread.NStateFromString(aNStateName); ParserLine l1 = ParserLine.NewSymFormat(finalFormat); l1.Tag = state; // l1[0].SetTargetProperty(aThread, "Address"); l1[1].SetTargetProperty(aThread, "Priority"); // if (aCapturesWaitObject) { l1[2].SetTargetMethod(this, "SetThreadNStateWaitObject"); } // l1.ElementComplete += new ParserElementBase.ElementCompleteHandler(NThreadState_ElementComplete); aParagraph.Add(l1); }
void NThreadState_ElementComplete(ParserElementBase aElement) { ParserLine line = (ParserLine)aElement; System.Diagnostics.Debug.Assert(line.Tag is NThread.TNThreadState); NThread.TNThreadState state = (NThread.TNThreadState)line.Tag; ParserParagraph paragraph = line.Paragraph; System.Diagnostics.Debug.Assert(paragraph.Tag is NThread); NThread thread = (NThread)paragraph.Tag; thread.NState = state; }
public static TNThreadState NStateFromString(string aState) { NThread.TNThreadState ret = NThread.TNThreadState.EUnknown; // switch (aState.ToUpper()) { case "READY": ret = NThread.TNThreadState.EReady; break; case "SUSPENDED": ret = NThread.TNThreadState.ESuspended; break; case "WAITFSEM": ret = NThread.TNThreadState.EWaitFastSemaphore; break; case "SLEEP": ret = NThread.TNThreadState.ESleep; break; case "BLOCKED": ret = NThread.TNThreadState.EBlocked; break; case "DEAD": ret = NThread.TNThreadState.EDead; break; case "WAITDFC": ret = NThread.TNThreadState.EWaitDfc; break; default: case "??": ret = NThread.TNThreadState.EUnknown; break; } // return(ret); }