gpt4 book ai didi

c++ - 使用 C++ 的多线程和并行进程

转载 作者:行者123 更新时间:2023-11-30 03:56:00 26 4
gpt4 key购买 nike

我想创建一个 c++ 网络服务器,它将为登陆我网站的每个用户执行一项任务。由于任务的计算量可能很大(现在只是长时间 sleep ),我想在不同的线程上处理每个用户。我正在使用 mongoose 设置网络服务器。

不同的进程(在我下面的代码中只有一个,又名 server1)设置正确并且似乎正常运行。但是,线程似乎一个接一个地排队,因此如果 2 个用户到达终点,则第二个用户必须等到第一个用户完成。我错过了什么?线程是否超出范围?是否有我应该使用的“线程管理器”?

#include "../../mongoose.h"
#include <unistd.h>
#include <iostream>
#include <stdlib.h>
#include <thread>


//what happens whenever someone lands on an endpoint
void myEvent(struct mg_connection *conn){
//long delay...
std::thread mythread(usleep, 2*5000000);
mythread.join();
mg_send_header(conn, "Content-Type", "text/plain");
mg_printf_data(conn, "This is a reply from server instance # %s",
(char *) conn->server_param);
}

static int ev_handler(struct mg_connection *conn, enum mg_event ev) {
if (ev == MG_REQUEST) {
myEvent(conn);
return MG_TRUE;
} else if (ev == MG_AUTH) {
return MG_TRUE;
} else {
return MG_FALSE;
}
}

static void *serve(void *server) {
for (;;) mg_poll_server((struct mg_server *) server, 1000);
return NULL;
}

int main(void) {
struct mg_server *server1;
server1 = mg_create_server((void *) "1", ev_handler);
mg_set_option(server1, "listening_port", "8080");
mg_start_thread(serve, server1);
getchar();
return 0;
}

最佳答案

长时间运行的请求应该这样处理:

static void thread_func(struct mg_connection *conn) {
sleep(60); // simulate long processing
conn->user_data = "done"; // Production code must not do that.
// Other thread must never access connection
// structure directly. This example is just
// for demonstration.
}

static int ev_handler(struct mg_connection *conn, enum mg_event ev) {
switch (ev) {
case MG_REQUEST:
conn->user_data = "doing...";
spawn_thread(thread_func, conn);
return MG_MORE; // Important! Signal Mongoose we are not done yet
case MG_POLL:
if (conn->user_data != NULL && !strcmp(conn->user_data, "done")) {
mg_printf(conn, "HTTP/1.0 200 OK\n\n Done !");
return MG_TRUE; // Signal we're finished. Mongoose can close this connection
}
return MG_FALSE; // Still not done

关于c++ - 使用 C++ 的多线程和并行进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28725189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com