服务器客户端应用程序,I';我很难想出一种在服务器端处理客户机数据的干净方法 我有一个服务器端的应用程序,在Linux上用C++编写。当客户机连接到我的服务器时,服务器生成一个线程,等待客户机发送要执行的服务器命令。这些命令依赖于操作系统。客户端与服务器对话的线程调用全局函数,这些函数执行客户端所需的命令。因此,对于客户端发送到服务器执行的每个依赖操作系统的命令,我必须有两个函数。所有这些全局函数都定义在与主线程函数相同的头中。不同操作系统的所有这些功能都变得有点混乱。我的想法是编写两个名为WindowsFuncs和LinuxFuncs的类,它们具有静态成员函数,为该类设计的操作系统执行所需的命令。关于如何清理我的逻辑,stackoverflows有哪些想法 这听起来不像是线程问题。 听起来你可以使用简单的继承
使用类似服务器客户端应用程序,I';我很难想出一种在服务器端处理客户机数据的干净方法 我有一个服务器端的应用程序,在Linux上用C++编写。当客户机连接到我的服务器时,服务器生成一个线程,等待客户机发送要执行的服务器命令。这些命令依赖于操作系统。客户端与服务器对话的线程调用全局函数,这些函数执行客户端所需的命令。因此,对于客户端发送到服务器执行的每个依赖操作系统的命令,我必须有两个函数。所有这些全局函数都定义在与主线程函数相同的头中。不同操作系统的所有这些功能都变得有点混乱。我的想法是编写两个名为WindowsFuncs和LinuxFuncs的类,它们具有静态成员函数,为该类设计的操作系统执行所需的命令。关于如何清理我的逻辑,stackoverflows有哪些想法 这听起来不像是线程问题。 听起来你可以使用简单的继承,c++,multithreading,cross-platform,coding-style,os-dependent,C++,Multithreading,Cross Platform,Coding Style,Os Dependent,使用类似 abstract class OSMethods { void listDir(); } class OSMethodsLinux : OSMethods { void listDir() { system.exec("ls"); } } class OSMethodsWin : OSMethods { void listDir() { system.exec("dir"); } } 然后,服务器客户端处理代码有如下方法 void accept(Socket s,
abstract class OSMethods {
void listDir();
}
class OSMethodsLinux : OSMethods {
void listDir() { system.exec("ls"); }
}
class OSMethodsWin : OSMethods {
void listDir() { system.exec("dir"); }
}
然后,服务器客户端处理代码有如下方法
void accept(Socket s, OSMethods m) {
s.readCommand();
m.listDir(); // or whatever
}
确保将正确的实例传递给Linux或Win类的accept。
所以没有静态方法
一般来说,我发现程序中不需要静态方法(main除外),除非你在做一些聪明的事情,大多数东西都不需要它们,它们会导致设计不太灵活。随机问题:我希望线程安全地调用所有这些函数,那么我应该将这些类方法的互斥变量放在哪里?在OSMethodsXXX的单个实例中放置一个互斥体,OSMethodsXXX中的每个方法都在方法和完成后释放。请确保只创建一个OSMethodsXXX实例。由于我是在linux机器上构建的,如何将windows代码保留在其中,以便在构建之前不必对其进行注释?只是假想?