我有一个带有非线程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调用。速度并不是真正的问题。