mirror of
https://github.com/zeromq/libzmq.git
synced 2025-02-01 14:55:59 +01:00
Allow change of pthread priority
Rationale: In a real-time environment it is sometime mandatory to tune threads priority and scheduling policy. This is required by our users who mixes real-time and server threads within the same process. It's not planned to support this on non-pthread platforms (e.g. Windows).
This commit is contained in:
parent
64513d8522
commit
112ef6f172
@ -62,6 +62,7 @@ void zmq::thread_t::stop ()
|
||||
#else
|
||||
|
||||
#include <signal.h>
|
||||
#include <sstream>
|
||||
|
||||
extern "C"
|
||||
{
|
||||
@ -83,12 +84,36 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
bool getenvi(const char *env_, int &result_)
|
||||
{
|
||||
char *str = getenv(env_);
|
||||
if(str == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
std::stringstream ss(str);
|
||||
return ss >> result_;
|
||||
}
|
||||
|
||||
void zmq::thread_t::start (thread_fn *tfn_, void *arg_)
|
||||
{
|
||||
tfn = tfn_;
|
||||
arg = arg_;
|
||||
int rc = pthread_create (&descriptor, NULL, thread_routine, this);
|
||||
posix_assert (rc);
|
||||
|
||||
int prio;
|
||||
if(getenvi("ZMQ_THREAD_PRIO", prio))
|
||||
{
|
||||
int policy = SCHED_RR;
|
||||
getenvi("ZMQ_THREAD_POLICY", policy);
|
||||
|
||||
struct sched_param param;
|
||||
param.sched_priority = prio;
|
||||
rc = pthread_setschedparam(descriptor, policy, ¶m);
|
||||
posix_assert (rc);
|
||||
}
|
||||
}
|
||||
|
||||
void zmq::thread_t::stop ()
|
||||
|
Loading…
x
Reference in New Issue
Block a user