Semilla aleatoria de milisegundos en Windows y Linux

Necesito colocar el generador de números aleatorios en boost (que se carga desde un int) para algunos procesos, para un progtwig que tiene que comstackr y trabajar tanto en Windows como en Linux.

Utilicé std:time(0) , que funcionó, pero como los procesos son trabajos que se ejecutan simultáneamente, algunos de ellos se ejecutarán en el mismo segundo, produciendo los mismos resultados.

Así que necesito sembrarlo en milisegundos, o cualquier otro generador aleatorio multiplataforma para el caso. Intenté clock() pero no pude convertirlo de time_t a int.

Gracias.

Si está iniciando todos los trabajos desde un solo script.

Entonces podría pasar un número incrementado como un argumento en la línea de comando. Cada trabajo luego agrega este valor al resultado de time () para generar su semilla.

Nota: No veo ningún requisito en el OP sobre seguridad.
El código original está usando el tiempo (NULL) y esto tendrá una semilla que se puede adivinar.

 int main(int argc,char* argv[]) { srand(time(NULL) + boost::lexical_cast(argv[1])); // STUFF } 

Probablemente sea mejor usar una fuente de números aleatorios específica de la plataforma. En Linux, use /dev/urandom y lea algunos bytes. En Windows, una forma sencilla de adquirir unos pocos bytes de entropía es UuidCreate .