In general, you could use std::async to have each command be performed asynchronously.
However, your case is much more specific; I think Windows itself will limit it so that subsequent Beep() commands overwrite the previous Beep() commands playing, even if Beep() is played over 2 different processes at once.
I assume you want a superposition of all of those pure frequencies to be played for 10 seconds? You might have better luck with PlaySound (requires linking with winmm, "windows multimedia"). For example, you could independently write and embed/load a WAVE file and have PlaySound play it. If you want to be even fancier, you could generate the WAVE file header and waveform data in-memory and then call PlaySound with a pointer to the data to avoid having to make a .wav file in the first place.
Even if windows did allow it to beep in parallel (I agree, it prob does not allow) I think threading it is going to fail apart from say testing / playing code. I mean if you beeped them all at once for 2 seconds duration, it would sort of work but if you tried to just beep them for a milisecond, they would likely not all happen exactly at the same time unless you added additional code in the threads to go at a specific time slice; it may be very challenging to do that in a way that the human ear believes they were all in synch.