Don't reinvent the wheel. If you find a library that does what you want to do, use it. You're just wasting effort otherwise.
Oh? Now tell me the limitations of the implementation that your magical library has. Oh right... you don't even know how do to it yourself in the first place, let alone the problems you'll end up with in the future should you need to change libraries.
I am encouraging the OP to learn how to think, how to process a problem, how to read documentation (which is very easy).
Besides, there are a million odd "Rogue remakes".... why reinvent the wheel and make yet another rogue remake? It's wasted effort, right?
Besides, doing what you suggest would involve interacting with the terminal/OS directly at a very low level,
Uhh... making threads is "low level" now? Directly calling win32_threads or p_threads is hardly "low level" programming. This is how people program.
Sure, you could just download a very high level language like python, java, or even C# and not give a crap about how anything works, or if it works... but you should be choosing the language best suited for your task, not being restricted by your fear of doing things yourself.
making your program unportable and probably requiring special knowledge that I doubt the OP has.
"Portable code" is often misused in the same manner you just misused it.
To show you how badly you misused code portability, I'll challenge you to tell me that win32 software is not platform independent. WINE brings many windows libraries over to *NIX systems. They're imperfect libraries, but still libraries none the less.
There is no guarantee that the system you're targeting supports threads, for instance. std::thread is just an abstraction that calls the system level threading service. The use of abstractions, rather than their implementation, is what portable code envelopes. Even if it is as simple as a macro that changes to win_threads instead of p_threads.
The cost of abstraction is the same cost that WINE pays for attempting to translate direct x routines into opengl equivalents. Performance. DirectX is used very differently when compared to opengl, an engine designed around one or the other depends on their individual ways of doing things. You could do further abstraction and make it easy to change between the two of them via header files... but as always, that way of doing things has a performance hit. Since the abstraction gets compiled in you can get some benefits over wrapping around the calls.