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
服务器客户端应用程序,I';我很难想出一种在服务器端处理客户机数据的干净方法 我有一个服务器端的应用程序,在Linux上用C++编写。当客户机连接到我的服务器时,服务器生成一个线程,等待客户机发送要执行的服务器命令。这些命令依赖于操作系统。客户端与服务器对话的线程调用全局函数,这些函数执行客户端所需的命令。因此,对于客户端发送到服务器执行的每个依赖操作系统的命令,我必须有两个函数。所有这些全局函数都定义在与主线程函数相同的头中。不同操作系统的所有这些功能都变得有点混乱。我的想法是编写两个名为WindowsFuncs和LinuxFuncs的类,它们具有静态成员函数,为该类设计的操作系统执行所需的命令。关于如何清理我的逻辑,stackoverflows有哪些想法 这听起来不像是线程问题。 听起来你可以使用简单的继承_C++_Multithreading_Cross Platform_Coding Style_Os Dependent - Fatal编程技术网

服务器客户端应用程序,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代码保留在其中,以便在构建之前不必对其进行注释?只是假想?