【发布时间】:2020-04-08 23:31:33
【问题描述】:
我想创建一个函数,当从套接字接收缓冲区时,线程使整个程序冻结在我的函数之外,直到我的函数完成。我尝试这些如下
函数监听
void Listen(can* _c) {
while (true)
{
std::lock_guard<std::mutex>guard(_c->connection->mutex);
thread t(&connect_tcp::Recv_data,_c->connection,_c->s,ref(_c->response),_c->signals);
if (t.joinable())
t.join();
}
}
函数 dataset_browseCan
void dataset_browseCan(can* _c) {
thread org_th(Listen, _c); // I call thread here
org_th.detach();
dataset_browse(_c->cotp, _c->mms_obj, _c->connection, _c->response, _c->list, _c->size_encoder, _c->s);
dataset_signals_browse(_c->cotp, _c->mms_obj, _c->connection, _c->response, _c->list, _c->size_encoder, _c->s);
Sleep(800);
_c->signals = new Signals[_c->response.real_signals_and_values.size()];
}
函数接收数据
void connect_tcp::Recv_data(SOCKET s,mms_response &response,Signals *signals) {
LinkedList** list = new LinkedList * [1000];
uint8_t* buffer = new uint8_t [10000];
Sleep(800);
/*std::lock_guard<std::mutex>guard(mutex);*/
thread j(recv,s, (char*)buffer, 10000, 0);
j.join()
/*this->mutex.unlock();*/
decode_bytes(response,buffer, list,signals);
}
我尝试了 mutex 和 this_thread::sleep_for() 但每次我的主函数都继续运行。 是否可以冻结程序?
【问题讨论】:
-
我不知道从哪里开始,这有很多问题。从第一个开始:在
Listen中,线程t完全没有意义。调用线程阻塞,而另一个线程执行。你应该直接打电话给Recv_data。
标签: c++ multithreading sockets