Makes the gui responsive while the disassembler is working. Would also
allow for severall worker threads in the disassembler in the future --
and more cool stuff!
}
InformationManager::~InformationManager() {
}
InformationManager::~InformationManager() {
+ disassemblerThread.quit();
for (auto b : blocks)
delete b.second;
for (auto b : blocks)
delete b.second;
for (auto i : plugins)
delete i;
for (auto i : plugins)
delete i;
+ disassemblerThread.wait();
}
void InformationManager::reset(const std::string& filename) {
this->filename = filename;
disassembler.reset(createLLVMDisassembler(filename, this));
emit resetEvent();
}
void InformationManager::reset(const std::string& filename) {
this->filename = filename;
disassembler.reset(createLLVMDisassembler(filename, this));
emit resetEvent();
- if (disassembler.get() != NULL)
- disassembler.get()->start();
+ if (disassembler.get() != NULL) {
+ disassembler.get()->moveToThread(&disassemblerThread);
+ connect(&disassemblerThread, &QThread::started,
+ disassembler.get(), &Disassembler::start);
+ disassemblerThread.start();
+ }
}
void InformationManager::load(const std::string& filename) {
}
void InformationManager::load(const std::string& filename) {
std::unique_ptr<QTemporaryFile> tmpfile;
std::vector<QPluginLoader*> plugins;
std::unique_ptr<QTemporaryFile> tmpfile;
std::vector<QPluginLoader*> plugins;
+ QThread disassemblerThread;
log4cxx::LoggerPtr logger;
};
log4cxx::LoggerPtr logger;
};
Disassembler() {}
virtual ~Disassembler() {}
Disassembler() {}
virtual ~Disassembler() {}
- virtual void start() = 0;
virtual void getSymbols() = 0;
virtual uint64_t entryAddress() = 0;
#ifndef SWIG
public slots:
#endif
virtual void getSymbols() = 0;
virtual uint64_t entryAddress() = 0;
#ifndef SWIG
public slots:
#endif
+ virtual void start() = 0;
virtual Function * disassembleFunctionAt(uint64_t address) {
return disassembleFunctionAt(address, "");
}
virtual Function * disassembleFunctionAt(uint64_t address) {
return disassembleFunctionAt(address, "");
}