使用线程Web服务器改进非线程应用程序

时间:2015-12-18 17:27:49

标签: c++ multithreading embeddedwebserver

我有一个带有非线程Web服务器的现有c ++嵌入式应用程序(ARM)。它的使用方式如下:

main(){
   while(1){
     doIO();
     doProcess1();
     doProcess2();
     etc...
     webServer.poll(); 
   }
}

webServer.poll()提供来自基本目录的页面,如果url包含特定模式,则调用我的一个函数,以便它可以响应经常读取或写入SD卡的rpc调用。

我必须替换现有的Web服务器代码,我找不到符合我要求的非线程嵌入式Web服务器(没有Boost是最大的。)

Civetweb似乎符合我的要求并且工作正常,但它是线程化的(每个连接1个。)

我的问题是,由于重写所有现有代码都是线程安全的不是一个选项,可以用全局“threadLock”做这样的事情吗?

main(){
   startThreadedWebServer();
   while(1){
     pthread_mutex_lock(&threadLock);
     doIO();
     doProcess1();
     doProcess2();
     etc...
     pthread_mutex_unlock(&threadLock);
     sleep(0.1); //give webServer some time to get the lock
   }
}

然后在rpc函数中:

pthread_mutex_lock(&threadLock);
doRpcCode() 
pthread_mutex_unlock(&threadLock);

服务器可以在线程中提供普通页面,但任何rpc调用都将被锁定。

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

0 个答案:

没有答案