Ich denke - ursprünglich - diese Information wurde nicht zur Verfügung gestellt, weil jede API, die diese Informationen lieferte, irreführend und nutzlos wäre.
Betrachten Sie zwei mögliche Fälle - der aktuelle Thread hat den Thread-of-Interest deaktiviert. Code im aktuellen Thread kennt über den suspendierten Zustand und sollte in der Lage sein, es zu teilen, so dass es keine Notwendigkeit für das Kernel-Team gibt, eine API hinzuzufügen.
Der zweite Fall, einige andere/ein dritter Thread im System hat den Thread von Interesse ausgesetzt (und es gibt keine Möglichkeit zu verfolgen, welcher Thread war). Jetzt haben Sie eine Racebedingung - dieser andere Thread könnte zu jeder Zeit den Thread von Interesse entschlüsseln und die von der API gesammelten Informationen sind nutzlos - Sie haben einen Wert, der angibt, dass der Thread suspendiert ist, wenn er tatsächlich nicht ausgeführt wird.
Moral der Geschichte - wenn Sie wissen wollen, dass ein Thread ausgesetzt ist - suspend es: Der Rückgabewert von SuspendThread ist die vorherige Aussetzung des Threads. Und jetzt wissen Sie etwas Nützliches - Der Thread war und bleibt suspendiert - was nützlich ist. Oder dass es nicht war (aber jetzt ist) suspendiert. Wie auch immer, der Zustand des Threads ist nun deterministisch bekannt, so dass Sie theoretisch einige intelligente Entscheidungen treffen können, die auf diesem basieren - ob zu ResumeThread, oder ihn suspendiert halten.
Ja - jeder Versuch, den Thread-Suspend-Status abzufragen, wird von Natur aus rassig sein –
Es gibt Thread-Zustände jenseits von "suspended" und "running". Ich denke, es ist wahrscheinlicher, dass das OP daran interessiert ist zu wissen, welche Threads blockiert sind. In jedem Fall ist dein Standpunkt zu den Rennbedingungen ein guter. Wenn es einen Weg gibt, den Status eines Threads zu erhalten, sollte er nur zu Informationszwecken verwendet werden. Jeder Versuch, es für den Kontrollfluss zu benutzen, wird zu einer Welt voller Verletzungen führen. –
Exakt - ausgesetzt oder nicht ausgesetzt ist in der Regel nicht von Interesse. Laufen oder warten auf ein Synchronisationssignal .... das ist in der Regel das, was von Interesse ist, und ist eindeutig etwas, das bestimmt werden kann, da Debugger und Tools wie Performance Monitor genau diese Informationen aufzeigen. Darüber hinaus werden Threads in einer ordnungsgemäß geschriebenen Anwendung * niemals * suspendiert, es sei denn, sie werden unter einem Debugger ausgeführt. – Deltics