我有一个在Linux上用C ++编写的服务器客户端应用程序。当客户端连接到我的服务器时,服务器会产生一个线程,该线程等待客户端发送服务器命令执行。这些命令取决于OS。客户端正在与服务器通话的线程,调用执行客户端想要的必需命令的全局函数。因此,我必须为客户端发送到要执行的服务器的每个OS依赖命令都有两个函数。所有这些全局函数都是在主线函数的同一标头中定义的。对于不同的操作系统,所有这些功能都变得有些混乱。我的想法是编写两个称为WindowsFuncs和LinuxFuncs的类,它们具有静态成员函数,可为该OS设计该类所需的命令。关于如何清洁我的逻辑的堆叠式流体想法有哪些?

有帮助吗?

解决方案

这听起来不像是线程问题。听起来您可以使用简单的继承。

使用类似的东西

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类。因此没有静态方法。

通常,我发现您的程序中不需要静态方法(Main除外),除非您做聪明的事情,否则大多数事情都不需要它们,并且它们会导致灵活的设计。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top