You are mixing few thing up here. But to answer your question first: Yes, "next application command" is different from "next CPU command - for register". It's like comparing apples and oranges. These two things are on two different levels of abstraction.
Program counter is a general term for a register in processor which holds
the address of the next instruction to be executed. This comes from
Von Neumann architecture[
^] of computers. It doesn't hold the next command (meaning a command in your programming language), not even the next instruction, but the location where it can be found. This register is called
instruction pointer (IP/EIP/RIP) in
Intel processors[
^] and cannot be written to directly, it can only be changed via jump/branch instructions. It is not clear what do you mean by implementing program counter unless you are building your own processor or a simulator of one. If you wanna get technical there is lot to explore as modern processors are quite complicated. Intel processors use
microarchitecture[
^] with multistage pipeline, speculative and out-of-order execution etc. The terms first and next become very relative in this context.
On programming language level, the commands are executed in order in which they are written. Compilers can
reorder instructions[
^] as part of optimization process but always without changing the semantics of your code. On a multiprocessor systems there is one more complication namely the order of reads and writes to the memory. This is described by the
memory model[
^] for the given platform. Last but not least the operating system is responsible for
scheduling[
^] processes and threads so your code can be stopped in the middle of execution and put on wait list. In case of a context switch the next command/instruction comes from a different thread even from different process/application. Some application can get bigger share of time - this is governed by process/thread priority. I guess this is what you meant by "priority list" for windows applications.