我用CreateThread创建线程,它的第三个参数是线程函数地址,规定了线程函数必须是DWORD WINAPI ...(LPVOID lpParam)形式的,只能有单个参数,但是我用CreateThread创建的时候需要向线程函数传两个integer和两个char*,我在CSDN上看到了用结构体,我建了一个结...
可以用结构体指针:先定义一个结构体,包含你要传递的参数,再把这个结构体的地址强制类型转换后传给CreateThread函数。
比如我的程序里的这句话:CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Process,&SockRec,0,NULL);
我就不用工程了,直接用控制台写个例子你,方法都通用:
#include "stdio.h" #include "conio.h" #include "windows.h" typedef struct _THREADDATA { int v1; int v2; char *pStr1; char *pStr2; }*LPTHREADDATA, THREADDATA; DWORD WINAPI ThreadProc(LPVOID lParam) { LPTHREADDATA pData = (LPTHREADDATA)lParam; while (1) { printf("%d\t%d\t%s\t%s\n", pData->v1, pData->v2, pData->pStr1, pData->pStr2); } return 0; } int main() { LPTHREADDATA pData = new THREADDATA; pData->v1 = 10; pData->v2 = 100; pData->pStr1 = "Hello"; pData->pStr2 = "world"; DWORD ThreadId; ::CreateThread(NULL, 0, ThreadProc, (LPVOID)pData, 0, &ThreadId); getch(); return 0; }