这样的,DLL文件里多线程
DWORD _stdcall ChatRecvThread(LPVOID lpparam,char* ChatRecv)//聊天信息接受线程,注意有带2个参数。char* ChatRecv目的是我要在窗体里读出来显示到RichEdit里。
{
SOCKET m_socket=(SOCKET)lpparam;
char buff[256];
if (recv(m_socket,buff,256,0)==SOCKET_ERROR)
{
return -1;
}
char hostname,hostip;
gethostname(&hostname,strlen(&hostname));//计算机名
gethostbyaddr(&hostip,strlen(&hostip),AF_INET);//IP
ChatRecv=hostname+'('+hostip+')'+buff;
return 0;
}//而且我感觉这里面gethostname,gethostbyaddr似乎会出问题。所有这些东西都是为给Delphi调用的。然后我在我的另外一个函数里这样创建上面这个线程:
::CreateThread(NULL,0,ChatRecvThread,(LPVOID)s,0,&dwthread);//这里面的s声明是SOCKET s;
编译器报错:
error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *,char *)' to 'unsigned long (__stdcall *)(void *)'
None of the functions with this name in scope match the target type那我对::CreateThread(NULL,0,ChatRecvThread,(LPVOID)s,0,&dwthread);要怎么进行修改?
我要线程带2个参数。请大侠指教!
DWORD _stdcall ChatRecvThread(LPVOID lpparam,char* ChatRecv)//聊天信息接受线程,注意有带2个参数。char* ChatRecv目的是我要在窗体里读出来显示到RichEdit里。
{
SOCKET m_socket=(SOCKET)lpparam;
char buff[256];
if (recv(m_socket,buff,256,0)==SOCKET_ERROR)
{
return -1;
}
char hostname,hostip;
gethostname(&hostname,strlen(&hostname));//计算机名
gethostbyaddr(&hostip,strlen(&hostip),AF_INET);//IP
ChatRecv=hostname+'('+hostip+')'+buff;
return 0;
}//而且我感觉这里面gethostname,gethostbyaddr似乎会出问题。所有这些东西都是为给Delphi调用的。然后我在我的另外一个函数里这样创建上面这个线程:
::CreateThread(NULL,0,ChatRecvThread,(LPVOID)s,0,&dwthread);//这里面的s声明是SOCKET s;
编译器报错:
error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *,char *)' to 'unsigned long (__stdcall *)(void *)'
None of the functions with this name in scope match the target type那我对::CreateThread(NULL,0,ChatRecvThread,(LPVOID)s,0,&dwthread);要怎么进行修改?
我要线程带2个参数。请大侠指教!
解决方案 »
- 关于UAC的问题 100分相送
- VC6.0或VS2008中如何获取用户登录或注销系统的时间?
- tcpmp工程添加
- VC6.0中用ATL生成的全局变量_Module和 用VS2005中AtlModule区别是什么?为什么2005中不能获取资源句柄?
- 我想把网页里面的一张图片验证码复制到当前DC中,请问用什么方法?
- 请问CStringArray类型的RemoveAll()函数是否把内存资源都释放了呢?
- 请教:为什么?存储过程若为一条语句则在VC调用正确,若为多条则出错(我用了两个临时表)
- stdafx.h文件干吗用????
- 程序“打印”是向WINDOWS发出什么消息?(UP有分)
- 我要对dialog里的最小化,最大化和那个X按钮进行编程,怎么做?
- bluebohe请辞,批准
- 如何让给定起始和终止位置的文本呈选中状态(高亮状态)
{
.....
} THREAD_PARAM;DWORD WINAPI thread(LPVOID lParam)
{
THREAD_PARAM *Par=(THREAD_PARAM *)lParam;
.......
}int main(int argc,char **argv)
{
DWORD ThreadId;
THREAD_PARAM Par;
HANDLE hThread;
......
hThread=CreateThread(NULL,0,thread,(LPVOID *)&Par,0,&ThreadId);......
}
SOCKET m_hSocket;
DWORD _stdcall ListenThread(LPVOID lpparam);
DWORD _stdcall ChatRecvThread(LPVOID lpparam);
typedef struct parm
{
SOCKET s;
char* ChatRecv;
} THREAD_PARAM;//线程参数结构体DWORD _stdcall ListenThread(LPVOID lpparam)//Socket监听线程
{
SOCKET m_socket=(SOCKET)lpparam;
if (listen(m_socket,0)==SOCKET_ERROR)
return 0;
THREAD_PARAM *Par=(THREAD_PARAM *)lpparam;
Par->s=accept(m_socket,NULL,NULL);
s=accept(m_socket,NULL,NULL);
DWORD dwthread;
::CreateThread(NULL,0,ChatRecvThread,(LPVOID*)&Par,0,&dwthread);//这里(LPVOID*)&Par这样写对吗?能传给ChatRecvThread线程SOCKET s参数吗?还有结构体中的SOCKET s和其他参数要不要释放变量?不管它了?
return 0;
}DWORD _stdcall ChatRecvThread(LPVOID lpparam)//聊天信息接受线程
{
THREAD_PARAM *Par=(THREAD_PARAM *)lpparam;//Thread Struct,2个参数
SOCKET m_socket=Par->s;
char buff[256];
if (recv(m_socket,buff,256,0)==SOCKET_ERROR)
{
return -1;
}
char hostname,hostip;
gethostname(&hostname,strlen(&hostname));//计算机名
gethostbyaddr(&hostip,strlen(&hostip),AF_INET);//IP
Par->ChatRecv=hostname+'('+hostip+')'+buff;
return 0;
}
代码比较多,耐心的人请留意一下。