我使用这个类来捕获C++控制台应用程序中的信号。但是,这并不是Qt特有的。它在Windows平台上使用SetConsoleCtrlHandler(),并在其他平台上使用提供的函数。棘手的一点是“信号”不是一个跨平台术语 - Windows和POSIX对它们有不同的定义。无论如何,这个班级试图将他们映射到一个共同的词汇。 Ctrl^C是在两个平台上很好的映射。
我希望这可以适应您的具体情况。请注意,错误检查很少,应该可以改进。
用法(main.cpp中)
#include "SignalHandler.h"
class Application : public SignalHandler
{
public:
Application() : SignalHandler(SignalHandler::SIG_INT), myThread(NULL) {}
int Application::main(int argc, char *argv[])
{
// Main program instructions here (e.g. start a thread)
myThread = new Thread(...);
myThread->start();
myThread->join();
delete myThread;
return 0;
}
bool handleSignal(int signal)
{
std::cout << "Handling signal " << signal << std::endl;
if (_myThread && _myThread->isRunning())
{
_myThread->stop();
// The thread is going to stop soon, so don't propagate this signal further
return true;
}
// Let the signal propagate as though we had not been there
return false;
}
private:
Thread* myThread;
};
int main(int argc, char* argv[])
{
Application app;
return app.main(argc