C++ mongoose多线程实例
mongoose官网提供了多线程样例,但是没有兼容处理windows的场景,这是修改后可以兼容windows环境,并且加了消息的简单处理,可以在windows下实现多线程的http服务了。
#ifdef _WIN32
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#endif
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
static sig_atomic_t s_received_signal = 0;
static const char *s_http_port = "8888";
static const int s_num_worker_threads = 5;
static unsigned long s_next_id = 0;
static void signal_handler(int sig_num)
{
signal(sig_num, signal_handler);
s_received_signal = sig_num;
}
static struct mg_serve_http_opts s_http_server_opts;
static sock_t sock[2];
static void on_work_complete(struct mg_connection *nc, int ev, void *ev_data)
{
(void)ev;
char s[32];
struct mg_connection *c;
for (c = mg_next(nc->mgr, NULL); c != NULL; c = mg_next(nc->mgr, c))
{
if (c->user_data != NULL)
{
struct work_result *res = (struct work_result *)ev_data;
if ((unsigned long)c->user_data == res->conn_id)
{
sprintf(s, "conn_id:%lu sleep:%d", res->conn_id