コード例 #1
0
void MemoryWatcherUnix::WatcherThread()
{
	while (m_running)
	{
		for (auto& entry : m_values)
		{
			std::string address = entry.first;
			u32& current_value = entry.second;

			u32 new_value = ChasePointer(address);
			if (new_value != current_value)
			{
				// Update the value
				current_value = new_value;
				std::string message = ComposeMessage(address, new_value);
				sendto(
					m_fd,
					message.c_str(),
					message.size() + 1,
					0,
					reinterpret_cast<sockaddr*>(&m_addr),
					sizeof(m_addr));
			}
		}
		Common::SleepCurrentThread(SLEEP_DURATION);
	}
}
コード例 #2
0
void MemoryWatcher::Step()
{
  if (!m_running)
    return;

  for (auto& entry : m_values)
  {
    std::string address = entry.first;
    u32& current_value = entry.second;

    u32 new_value = ChasePointer(address);
    if (new_value != current_value)
    {
      // Update the value
      current_value = new_value;
      std::string message = ComposeMessage(address, new_value);
      sendto(m_fd, message.c_str(), message.size() + 1, 0, reinterpret_cast<sockaddr*>(&m_addr),
             sizeof(m_addr));
    }
  }
}
コード例 #3
0
std::string MemoryWatcher::ComposeMessages()
{
	std::stringstream message_stream;
	message_stream << std::hex;
	
	for (auto& entry : m_values)
	{
		std::string address = entry.first;
		u32& current_value = entry.second;

		u32 new_value = ChasePointer(address);
		if (new_value != current_value)
		{
			// Update the value
			current_value = new_value;
      message_stream << address << '\n' << new_value << '\n';
		}
	}
	
	return message_stream.str();
}