关于线程的问题

jone7319 2009-10-27 04:39:29
我的一个类中用到SOCKET不间断接收数据,用TIMER不理想,想用循环。独占方式会死锁,因此想开一个线程单独运行这个类成员函数,不知怎么做,高人请指点,谢谢!

想用线程的成员函数如下:
String MyData::RecvLoop()
{
int TimeOut = 0;
setsockopt(m_sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&TimeOut, sizeof(TimeOut));

char buf[2000] = {0};
while (true)
{
if(!SOCKET_ERROR == recv(m_sock, buf, 2000, 0))
{
return buf;
}

}
}
...全文
54 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lake_cx 2009-10-30
  • 打赏
  • 举报
回复
要放在类里面从TThread继承
不放类里面你可以把Self当那个PVOID指针传进去用也是一样的
jone7319 2009-10-27
  • 打赏
  • 举报
回复
如果要放在类内,怎么处理?
jone7319 2009-10-27
  • 打赏
  • 举报
回复
很机奇怪的问题:我把“ReicveLoop”这个函数放在类外,即去掉SIPC::如下,一切就OK了,难道说线程不支持类成员函数?
DWORD __stdcall ReicveLoop(LPVOID) //去掉SIPC::后运行正常????
{
int TimeOut = 0;
setsockopt(serverSocket, SOL_SOCKET, SO_RCVTIMEO, (char*)&TimeOut, sizeof(TimeOut));

char buf[2000] = {0};
while (true)
{
if(SOCKET_ERROR != recv(serverSocket, buf, 2000, 0))
{
String s=buf;
}
}
return 0;
}
//=====================================================================
String SIPC::SocketRecieve()
{
DWORD threadid1;
CreateThread(NULL,0,ReicveLoop,NULL,0,&threadid1);
}
jone7319 2009-10-27
  • 打赏
  • 举报
回复
我在类中使用如下代码出错,报“ReicveLoop”类型不一致,请帮看如何处理

DWORD __stdcall SIPC::ReicveLoop(LPVOID)
{
int TimeOut = 0;
setsockopt(serverSocket, SOL_SOCKET, SO_RCVTIMEO, (char*)&TimeOut, sizeof(TimeOut));

char buf[2000] = {0};
while (true)
{
if(SOCKET_ERROR != recv(serverSocket, buf, 2000, 0))
{
String s=buf;
}
}
return 0;
}
//=====================================================================
String SIPC::SocketRecieve()
{
DWORD threadid1;
CreateThread(NULL,0,ReicveLoop,NULL,0,&threadid1);
}

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧