Skip to content

ThreadPilot v1.7.1

Choose a tag to compare

@github-actions github-actions released this 26 Aug 12:31
· 1 commit to main since this release

A patch release that makes the CPU affinity feature do what its name says.

A user reported that applying a rule did nothing to a process's affinity. They were right, and for more than one reason.

The headline fix

Applying a saved rule, or a core mask from the Rules tab, now changes the affinity mask Windows actually enforces.

Two defects combined to hide this:

  • SetProcessorAffinity silently substituted a Windows CPU Sets hint for the hard affinity write it was asked to perform, while its caller read the affinity back and compared it. The apply therefore always reported a verification failure β€” and the affinity was never changed. Reproduced on a 16-CPU machine: requesting cores 0–1 left the process at 0xFFFF and returned a failure.
  • The shipped default assignment mode was ThreadPilot automatic, which applies only CPU Sets: a soft scheduling preference that leaves the affinity mask you see in Task Manager untouched. It was reported to the user as "Affinity applied successfully".

The default is now Affinity Mask, and a CPU Sets result states plainly that it is a soft preference and that Task Manager will not reflect it.

Existing rules keep the mode they were saved with. If a rule still isn't taking visible effect, open it and pick Affinity Mask.

The controls were not on screen

The CPU assignment mode picker and the Apply CPU Assignment button β€” both added in v1.6.0 β€” were placed inside a side panel that had been collapsed since v1.2.0. Neither had ever been reachable in a shipped build. The only way to apply affinity was the process-list context menu, and the only way to change the assignment mode was the default buried in Settings.

That is precisely why the reporting user had no way to reach the control that would have fixed their problem.

Both controls now live in the Advanced Affinity Picker, which opens expanded. The 326-line collapsed panel is gone.

Also fixed

  • "Save Current Settings as Rule" no longer saves a rule pinned to every CPU. It captured the core selection only while edits were staged, and otherwise fell back to a process affinity that the soft modes never changed β€” producing a rule guaranteed to do nothing.
  • Automatic mode no longer installs CPU Sets that an existing hard affinity prevents Windows from honouring. Windows never schedules a process outside its affinity mask whatever CPU Sets are set, yet the read-back still "verified". It now applies the hard affinity, which can genuinely replace the restriction.
  • Saved rules resolve CPU Sets against the current topology instead of trusting the CPU Set IDs stored when the rule was created. Those IDs are opaque and can name a different processor after a hardware change; a stale rule now reports an invalid topology rather than silently pinning the wrong CPUs.
  • Affinity masks that include CPU 63 are no longer discarded. They are negative as signed 64-bit values and were being rejected by magnitude comparisons.

Interface

  • The per-CPU cells in the Advanced Affinity Picker are read-only chips instead of checkboxes, with a hint explaining that a selection is staged through the pending core mask. They were never clickable β€” they only looked it. The chips keep their accessible name and report selected, not selected, or unavailable.
  • System tweak toggles are larger and state ON or OFF inside the track, replacing the unlabelled 40Γ—20 switch. The label is localized and widens the control rather than being clipped.
  • Saving a rule from the process context menu now explains that the rule is re-applied automatically when the process next starts, and that these rules are separate from the Rules tab, which manages process-to-power-plan associations.

Localization

Corrected "core mask" mistranslations in the Italian, Spanish, French and Russian locales, and German phrasing for the Rules tab and power plans.

Notes

  • Memory Integrity, hardware-accelerated GPU scheduling, and windowed-game optimizations still show a link to the relevant Windows page instead of a toggle. Those are deliberately left to Windows.
  • Applying affinity to a process protected by anti-cheat still fails, by design. ThreadPilot reports it and does not attempt to bypass protection.

Verification

707 unit tests, including new regression tests that fail against the previous implementation. The affinity fix was verified end to end against a live process: requesting cores 0–1 now moves it from 0xFFFF to 0x3.

Downloads

File Purpose
ThreadPilot_v1.7.1_Setup.exe Installer (recommended)
ThreadPilot_v1.7.1_Portable.zip Portable build, no installation
SHA256SUMS.txt Checksums for both files

Full changelog: v1.7.0...v1.7.1