// Copyright (c) 2005 DMTF.  All rights reserved.
   [Version ( "2.7.0" ), 
    UMLPackagePath ( "CIM::System::Processing" ), 
    Description ( 
       "Threads represent the ability to execute units of a Process or "
       "task in parallel. A Process can have many Threads, each of "
       "which is weak to the Process." )]
class CIM_Thread : CIM_EnabledLogicalElement {

      [Key, Description ( 
          "The scoping ComputerSystem\'s CreationClassName." ), 
       MaxLen ( 256 ), 
       Propagated ( "CIM_Process.CSCreationClassName" )]
   string CSCreationClassName;

      [Key, Description ( "The scoping ComputerSystem\'s Name." ), 
       MaxLen ( 256 ), 
       Propagated ( "CIM_Process.CSName" )]
   string CSName;

      [Key, Description ( 
          "The scoping OperatingSystem\'s CreationClassName." ), 
       MaxLen ( 256 ), 
       Propagated ( "CIM_Process.OSCreationClassName" )]
   string OSCreationClassName;

      [Key, Description ( "The scoping OperatingSystem\'s Name." ), 
       MaxLen ( 256 ), 
       Propagated ( "CIM_Process.OSName" )]
   string OSName;

      [Key, Description ( "The scoping Process\' CreationClassName." ), 
       MaxLen ( 256 ), 
       Propagated ( "CIM_Process.CreationClassName" )]
   string ProcessCreationClassName;

      [Key, Description ( "The scoping Process\' Handle." ), 
       MaxLen ( 256 ), 
       Propagated ( "CIM_Process.Handle" )]
   string ProcessHandle;

      [Key, Description ( 
          "CreationClassName indicates the name of the class or the "
          "subclass used in the creation of an instance. When used "
          "with the other key properties of this class, this "
          "property allow all instances of this class and its "
          "subclasses to be uniquely identified." ), 
       MaxLen ( 256 )]
   string CreationClassName;

      [Key, Description ( "A string used to identify the Thread." ), 
       MaxLen ( 256 )]
   string Handle;

      [Description ( 
          "Priority indicates the urgency or importance of "
          "execution of a Thread. A Thread may have a different "
          "priority than its owning Process. If this information is "
          "not available for a Thread, a value of 0 should be used." )]
   uint32 Priority;

      [Description ( 
          "Indicates the current operating condition of the Thread. "
          "Values include ready (2), running (3), and blocked (4), "
          "among others. The majority of the enumerated values are "
          "obvious. However, a few require additional explanation: \n"
          "7 (Ready but Relinquished Processor) describes that a "
          "thread is in the Ready state, but has voluntarily "
          "relinquished execution time to other threads. For "
          "example, this state may indicate a problem when the "
          "relinquishing thread is not handling items on its "
          "queues. If these semantics cannot be detected, the "
          "thread should report its state as 2 (\"Ready\"). \n"
          "8 (Hung) indicates that a thread is not responding." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8" }, 
       Values { "Unknown", "Other", "Ready", "Running", "Blocked", 
          "Suspended Blocked", "Suspended Ready", 
          "Ready But Relinquished Processor", "Hung" }]
   uint16 ExecutionState;

      [Description ( 
          "Time in kernel mode, in milliseconds. If this "
          "information is not available, a value of 0 should be "
          "used." ), 
       Units ( "MilliSeconds" ), 
       PUnit ( "second * 10^-3" )]
   uint64 KernelModeTime;

      [Description ( 
          "Time in user mode, in milliseconds. If this information "
          "is not available, a value of 0 should be used." ), 
       Units ( "MilliSeconds" ), 
       PUnit ( "second * 10^-3" )]
   uint64 UserModeTime;


};
