Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用线程化web服务器改装非线程化应用程序 我有一个现有的C++嵌入式应用程序(ARM),它带有一个非线程Web服务器。它是这样使用的: main(){ while(1){ doIO(); doProcess1(); doProcess2(); etc... webServer.poll(); } }_C++_Multithreading_Embeddedwebserver - Fatal编程技术网

使用线程化web服务器改装非线程化应用程序 我有一个现有的C++嵌入式应用程序(ARM),它带有一个非线程Web服务器。它是这样使用的: main(){ while(1){ doIO(); doProcess1(); doProcess2(); etc... webServer.poll(); } }

使用线程化web服务器改装非线程化应用程序 我有一个现有的C++嵌入式应用程序(ARM),它带有一个非线程Web服务器。它是这样使用的: main(){ while(1){ doIO(); doProcess1(); doProcess2(); etc... webServer.poll(); } },c++,multithreading,embeddedwebserver,C++,Multithreading,Embeddedwebserver,webServer.poll()服务于基本目录中的页面,并在url包含特定模式时调用my函数之一,以便它能够响应经常读取或写入SD卡的rpc调用 我必须替换现有的web服务器代码,但我找不到满足我要求的非线程嵌入式web服务器(没有最大的提升) 果子狸网似乎符合我的要求,工作正常,但它是螺纹的(每个连接1个) 我的问题是,既然将所有现有代码重新编写成线程安全的代码不是一个选项,那么使用全局“线程锁”这样做可以吗 然后在rpc函数中: pthread_mutex_lock(&threadL

webServer.poll()服务于基本目录中的页面,并在url包含特定模式时调用my函数之一,以便它能够响应经常读取或写入SD卡的rpc调用

我必须替换现有的web服务器代码,但我找不到满足我要求的非线程嵌入式web服务器(没有最大的提升)

果子狸网似乎符合我的要求,工作正常,但它是螺纹的(每个连接1个)

我的问题是,既然将所有现有代码重新编写成线程安全的代码不是一个选项,那么使用全局“线程锁”这样做可以吗

然后在rpc函数中:

pthread_mutex_lock(&threadLock);
doRpcCode() 
pthread_mutex_unlock(&threadLock);
服务器可以为线程中的正常页面提供服务,但任何rpc调用都将被锁定


我现在正在做这件事,它正在发挥作用,但我不知道是否有任何潜在的问题。此应用程序通常有1个用户,最多3个,每隔几秒钟进行一次rpc调用。速度并不是一个真正的问题。

除了糟糕的可伸缩性之外,这种方法没有什么根本的错误。如果后者不重要,我不明白为什么它不能被使用。可能满足您的需要--它支持许多不同的线程模型。Libmicrohttpd是我在10多个不同库中尝试的第一个。我不记得我为什么要传递这个,但是如果它不引起任何问题的话,我实际上更喜欢其他文件的线程服务。看看我写的,因为我和你有相似的需求。它不使用线程,其调用方式与在主循环中调用webServer.poll()的方式相同。这种方法除了糟糕的可伸缩性外,没有任何根本性的错误。如果后者不重要,我不明白为什么它不能被使用。可能满足您的需要--它支持许多不同的线程模型。Libmicrohttpd是我在10多个不同库中尝试的第一个。我不记得我为什么要传递这个,但是如果它不引起任何问题的话,我实际上更喜欢其他文件的线程服务。看看我写的,因为我和你有相似的需求。它不使用线程,其调用方式与在主循环中调用webServer.poll()的方式相同。
pthread_mutex_lock(&threadLock);
doRpcCode() 
pthread_mutex_unlock(&threadLock);