1

我正在尝试将 Windows 中的旧版 Delphi 代码移植到 Linux。但是我很难在 Linux 中找到相当于少数 Windows 功能的功能。目前我有一个使用winsock进行套接字操作的代码块,代码大纲如下(由于安全原因,我无法发布实际的整个代码)。因此,任何关于如何在 Linux 中实现相同功能的建议(不一定适用于 Delphi,但可以在 C/C++ 中)都会有很大帮助。

我对以下代码的理解是,线程创建一个窗口并等待消息 WM_USER ,稍后当程序创建套接字时,一旦在 FD_READ 或 FD_WRITE 或 FD_ACCEPT 或 FD_CONNECT 中发生任何事件,程序就会注册套接字以发送 WM_USER 消息或 FD_CLOSE。一旦套接字具有列表中提到的任何事件,它就会发送 WM_USER 消息,并且窗口处理程序会处理此消息。所以我的问题是,当我将程序移植到 Linux 时,如何在 Linux 中实现类似的功能?

int main()
{
...
 1. A thread is created and which executes the function thread_Function() shown below
....
....
 2. Now the program creates a TCP socket(TheSocket), sets few socket options and does the binding and invokes the WSAAsyncSelect() functionas follows on the socket

    if WSAAsyncSelect(TheSocket, WindowHandle, WM_USER,
    FD_READ or FD_WRITE or FD_ACCEPT or FD_CONNECT or FD_CLOSE)  



}

void thread_Function()
{
    WindowHandle := CreateWindow(
      name, name,  // class name, window name
      0, 0, 0, 0, 0,  // window style, x, y, width, hight
      0, 0,  // handle to parent and menu or child-window identifier
      HInstance,// handle to application instance
      nil); // pointer to window-creation data
    if WindowHandle = 0 then
      Print('Can''t create window handle: '+SysErrorMessage(GetLastError))
    else begin
      while GetMessage(Msg, 0, 0, 0) do begin
        if Msg.message = WM_USER then begin
                HandleSocketMessage()
        end
      end
    end
}
4

0 回答 0