Si può usare un semaforo ( o evento ) per sincronizzare i due processi.
Il processo B resta in attesa del via libera da A.
A fa quel che deve fare e quando serve, da via libera a B.
Il problema è che, se non si fa attenzione, se A s'inchioda prima di dare il via libera a B, B resta fermo al palo e va chiuso brutalmente.

Due esempi minimali (gestione errori a carico tuo ovviamente).

Processo A:
codice:
#include <iostream>
#include <windows.h>
using namespace std;

int main() {

	HANDLE Start = CreateEventW(0,0,0,L"freetom");
	if (Start == NULL) {
		cout << "fallito" << endl;
		return 1;
	}

	cout << "Attendo 10 secondi" << endl;
	Sleep(10000);

	cout << "Premi un tasto" << endl;
	
	SetEvent(Start);
	CloseHandle(Start);
	cin.get();
}
Processo B:
codice:
#include <iostream>
#include <windows.h>

using namespace std;
int main(int argc, char* argv[]) {

	HANDLE Start = CreateEvent(0,0,0,L"freetom");

	if (Start == NULL) {
		cout << "fallito" << endl;
		return 1;
	}

	cout << "sono bloccato" << endl;

	WaitForSingleObject(Start,60000);

	cout << "sono sbloccato" << endl;
	cout << "Premi un tasto" << endl;

	CloseHandle(Start);
	cin.get();

	return 0;
}