0

我想知道 C++ 是否有任何方式进行中断。我希望一个程序将信息存储在文本文件中,而另一个程序根据文本文件中的内容打印一条语句。由于我希望它尽可能准确,因此我需要在更新程序更新文件时中断打印程序。

4

2 回答 2

1

C++ 本身没有提供这种能力,它对其他可能运行或可能不运行的程序一无所知。

您需要研究的是 IPC(进程间通信),这是您的操作系统可能会提供的。

诸如信号、共享内存、信号量、消息队列等之类的东西。

由于您似乎使用文件本身作为向其他进程传递内容的方法,因此信号可能是要走的路。您只需从进程 A 向进程 B 发出信号,然后信号处理程序将在后者中运行。

当然,这一切都取决于您所针对操作系统。

于 2012-11-11T04:11:45.327 回答
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;
};
于 2012-11-11T04:17:12.300 回答