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