我想知道C ++是否有办法做中断。我希望一个程序将信息存储在文本文件中,而另一个程序根据文本文件中的内容打印一个语句。由于我希望它尽可能准确,我需要在更新程序更新文件时中断打印程序。
答案 0 :(得分:1)
C ++本身并不提供此功能,它对可能正在运行或未运行的其他程序一无所知。
您需要关注的是IPC(进程间通信),这是您的操作系统可能提供的。
信号,共享内存,信号量,消息队列等等。
由于您似乎将文件本身用作向其他进程提供内容的方法,因此信号可能是最佳选择。您只需从进程A向进程B发出信号,然后在后者中运行信号处理程序。
当然这一切都取决于您要定位的操作系统。
答案 1 :(得分: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;
};