StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()
Согласно Javadocs:
Последний элемент массива представляет нижнюю часть стека, что является наименьшим последним вызовом метода в последовательности.
A StackTraceElement
имеет getClassName()
, getFileName()
, getLineNumber()
и getMethodName()
.
Вам придется поэкспериментировать, чтобы определить, какой индекс вы хотите (вероятно, stackTraceElements[1]
или [2]
).
Используя другой подход, если вы используете C ++ для создания своего сервера, вы можете использовать TNonblockingServer вместо TThreadPoolServer, что позволит вам принимать множество подключений одновременно, независимо от того, сколько потоков активно. и т. д.
При этом вы не обязательно сможете работать быстрее (обработчики по-прежнему выполняются в пуле потоков), но больше клиентов смогут подключиться к вам одновременно.
Вот как выглядит код сервера NB:
shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
shared_ptr<MyHandler> handler(new MyHandler());
shared_ptr<TProcessor> processor(new MyProcessor(handler));
TNonblockingServer server(processor, protocolFactory, port);
Ваше ограничение четырьмя потоками в пуле встроено в конструктор по умолчанию SimpleThreadManager:
class SimpleThreadManager : public ThreadManager::Impl {
public:
SimpleThreadManager(size_t workerCount=4, size_t pendingTaskCountMax=0) :
workerCount_(workerCount),
pendingTaskCountMax_(pendingTaskCountMax),
firstTime_(true) {
}
...
};
Этот объект ThreadManager передается соонструктору ThreadPoolServer, поэтому передайте большее число конструктору этого объекта, чтобы увеличить размер пула потоков. .