Soweit ich weiss ist es nicht ganz die saubere Art, aber gängige Praxis, dass man in CreateThread() eine Variable zu void* castet, z.B. einen SOCKET.
Das funktioniert ja auch prima, auch in 64bit, solange es ein SOCKET ist, weil in allen Systemen void* und SOCKET die gleiche Bitbreite hat.
In 32bit Programmen kann ich auf dieselbe Art auch ein int im void* verstecken.
Problem ist nur, wenn in einem 64bit Programm die Variable ein int sein soll, weil hier void* 64bit hat, ein int aber nur 32bit.
Logisch meckert der Compiler dann:
"cast to pointer from integer of different size"
Wie mache ich aus dem int ein 64bit int, oder wie sonst übergebe ich dem Thread meine Variable?
Code:
SOCKET Socket = socket(AF_INET,SOCK_STREAM,0);
...
DWORD nThreadID;
CreateThread(0,0,UserThread,(void*)Socket,0,&nThreadID);
DWORD WINAPI UserThread(void* Data)
{
SOCKET Socket = (SOCKET)Data;
...
return 0;
}
Das funktioniert ja auch prima, auch in 64bit, solange es ein SOCKET ist, weil in allen Systemen void* und SOCKET die gleiche Bitbreite hat.
In 32bit Programmen kann ich auf dieselbe Art auch ein int im void* verstecken.
Problem ist nur, wenn in einem 64bit Programm die Variable ein int sein soll, weil hier void* 64bit hat, ein int aber nur 32bit.
Logisch meckert der Compiler dann:
"cast to pointer from integer of different size"
Wie mache ich aus dem int ein 64bit int, oder wie sonst übergebe ich dem Thread meine Variable?