2012-11-11 93 views
0

我想知道如果C++有任何方式做中斷。我想要一個程序將信息存儲在文本文件中,而另一個程序根據文本文件中的內容打印語句。由於我希望它儘可能準確,因此當更新程序更新文件時,我需要中斷打印程序。C++中斷?

+1

中斷是更大的OS的事情,你用哪個操作系統? – imreal

+0

文件不是進行進程間通信的非常好的方法。任何機會,你可以使用管道或套接字? –

回答

1

C++本身並不提供這種功能,它對其他可能或不可能運行的程序一無所知。

您需要了解的是IPC(進程間通信),您的操作系統可能提供的內容。

像信號,共享內存,信號量,消息隊列等事情。

由於您似乎正在使用文件本身作爲將內容傳遞到其他進程的方法,因此信號可能是要走的路。你只需要將信號從進程A發送到進程B,並且信號處理程序將在後者中運行。

當然,這一切都取決於哪個您的目標操作系統。

+0

我打算使用Windows,但如果Linux更好,我也可以使用它。但在此之前,礦山的整體項目包括如上所述的程序A和程序B,以及連接到程序B的硬件。而不是B打印,它將命令發送到硬件以點亮某些按鈕。 Linux服務器能否與我的硬件進行交互? – dalawh

1

如果您使用Windows,則可以使用FindFirstChangeNotification

這是我的一些舊代碼。這是運行在它自己的線程:

DWORD CDiskWatcher::Run(void *vpParameter) 
{ 
    CFileNotifyInterface *pIface = (CFileNotifyInterface *)vpParameter; 

    HANDLE handles[2]; 
    handles[0] = m_hQuitEvent; 
    handles[1] = ::FindFirstChangeNotification(m_szPath, FALSE, FILE_NOTIFY_CHANGE_LAST_WRITE|FILE_NOTIFY_CHANGE_FILE_NAME); 
    DWORD dwObject; 
    if (INVALID_HANDLE_VALUE != handles[1]) { 
     do { 
      // Wait for the notification 
      dwObject = ::WaitForMultipleObjects(2, handles, FALSE, INFINITE); 
      if (WAIT_OBJECT_0 + 1 == dwObject) { 
       // Continue waiting... 
       ::FindNextChangeNotification(handles[1]); 
       pIface->FireFileSystemChange(m_szPath); 
      } 
     } while (WAIT_OBJECT_0 != dwObject); 
     // Close handle 
     ::FindCloseChangeNotification(handles[1]); 
    } 
    return 0; 
} 

注m_hQuitEvent與CreateEvent()和CFileNotifyInterface創建是回調:

class CFileNotifyInterface 
{ 
public: 
    virtual void FireFileSystemChange(const char *szPath) = 0; 
};