我用CreateThread创建线程,它的第三个参数是线程函数地址,规定了线程函数必须是DWORD WINAPI ...(LPVOID lpParam)形式的,只能有单个参数,但是我用CreateThread创建的时候需要向线程函数传两个integer和两个char*,我在CSDN上看到了用结构体,我建了一个结构LPPARAM,然后在线程函数的开头写了LPPARAM* _lpParam=(LPPARAM*) lpParam;但是提示说不能从void*转换到LPPARAM*,我到底该怎么办才能传这4个参数?
我就不用工程了,直接用控制台写个例子你,方法都通用:
#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;
}
typedef struct _THREADDATA
{
SOCKET sConnect;
int cid;
}*LPTHREADDATA, THREADDATA;
void recvProc(LPVOID lParam);
int main()
{
//=========================================
LPTHREADDATA pData = new THREADDATA;
pData->sConnect = sClient[clientAmount];
pData->cid=clientAmount;
pData->sConnect = sClient[clientAmount-1];pData->cid=clientAmount;
//cout<<sClient[clientAmount-1]<<endl;cout<<pData->cid<<endl;
hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)recvProc, (LPVOID)pData,0,NULL);
cout<<"创建线程r"<<hThread<<endl;
cout<<"sClient:"<<sClient[clientAmount-1]<<endl;
void recvProc(LPVOID lParam)
{
//==============================================
LPTHREADDATA ppData = (LPTHREADDATA)lParam;
SOCKET sockConnect=ppData->sConnect;
int cid=ppData->cid;
.....