Это
int* my_int;
определяет указатель на некоторое целое число, не инициализируя его фактическим целочисленным адресом, поэтому он указывает на некоторый случайный адрес в памяти.
Это
*(my_int) = 1;
затем записывает значение в этот случайный адрес.
Официально, это вызывает ужасное Неопределенное поведение . После этого все ставки выключены. Даже если в результате этого ваш компьютер взорвется вам в лицо, ваш компилятор будет соответствовать стандартам.
Однако есть еще кое-что: поскольку вы передаете этот указатель какой-то функции, которая должна выполняться асинхронно, вам нужно убедиться, что объект, на который ссылается указатель, «жив» до тех пор, пока ваш другой поток будет пытаться чтобы получить к нему доступ. По сути, единственный способ сделать это - сделать его глобальным, статическим или динамически размещаемым.
Однако, учитывая ваш код, я не вижу причин, по которым вам все равно нужно передавать фактический указатель. Проход reinterpret_cast<LPVOID>(1)
должен сделать.