Задача такая, что мне требуется прицепить к приложению не на qt библиотеку, реализующую работающий в отдельном потоке tcp-сервер . Ну и т.к. более-менее знаком с Qt - решил приюзать его.
class App : public QApplication 
{
  Q_OBJECT
  private:
    Server* server;
    static App* instance;
    App(int argc, char** argv);
    static int getArguments(char*** argv);
    static void* thread(void*);
  public:
    static App* get();
    void run();
}
App* App::instance = NULL;
App::App(int argc, char** argv) : QApplication(argc, argv) {
  server = new Server();
  if (! server->listen()) {
    log() << "Server not listening";
    server->close();
    return;
  }
  log() << "Server listening";
}
App* App::get() {
  if (App::instance == NULL) {
    char** argv;
    int argc = App::getArguments(&argv);
    App::instance = new App(argc, argv);
  }
  return App::instance;
}
void* App::thread()
{
  log() << "Application thread";
  App::get()->exec();
  return NULL;
}
void App::run()
{
    pthread_t thread;
    pthread_create(&thread, NULL, App::thread, NULL);
}
class Server : public QTcpServer
{
  Q_OBJECT
  private slots:
    void onNewConnection();
  public:
    explicit Server(QObject* parent = NULL);
    bool listen();    
}
Server::Server() {
  connect(this, SIGNAL(newConnection()), this, SLOT(onNewConnection()));
}
bool Server::listen() {
  return ((QTcpServer*)this)->listen(HOST, PORT);
}
void Server::onNewConnection() {
  debug() << "New connection";
  QTcpSocket* socket = this->nextPendingConnection();
  socket->write("HELLO");
}
Ну и в своей вызываемой из сторонней программы функции:
App::get()->run();
В результате имею :
Server listening
Application thread
telnet 127.0.0.1 8070
upd. а нет - пока упрощал вам тут, выяснил какой участок вызывал ошибку. Такое сработало бы.


