Multithreaded programming and Multiprocess programming are very similar.
Multithreaded programming places the responsibility of scheduling the thread with the program and not with the task scheduler in the kernel. Thus, your program needs to swap things around to simulate that both items are running at the same time.
Multithreaded programming uses a single set of instructions in memory, so you need to lock access to parts that update variable values to prevent a collision. Multiprocess programming gives each process its own memory space thus you don't need to worry about locking variables before updates.
Multithreaded programming can communicate with other threads using all sorts of global variables. Multiprocess programming needs to use IPC or pipes, etc. to communicate with other processes.
In general, I've almost always been able to write programs with nothing but fork. Since it sounds like you're working on a program to launch other programs, fork sounds like it would work. Just keep the parent process in an infinite loop and run it in the background.