|
cgma
|
#include <AppUtil.hpp>
Definition at line 35 of file AppUtil.hpp.
Definition at line 217 of file AppUtil.cpp.
{
instance_ = NULL;
catch_interrupt( CUBIT_FALSE );
if (mProgressTool)
delete mProgressTool;
mProgressTool = NULL;
#ifdef CUBIT_USE_THREADS
delete mThreadPool;
#endif
}
| AppUtil::AppUtil | ( | ) | [private] |
Definition at line 191 of file AppUtil.cpp.
{
term_width = 0;
term_height = 0;
mAppStarted = CUBIT_FALSE;
// reset catching_sigint_ here, even though it's static, 'cuz it used
// to be reset to false on construction before going static
catching_sigint_ = CUBIT_FALSE;
// create a default progress tool that does nothing
// an app can replace this with an app specific progress tool
mProgressTool = new StubProgressTool();
concurrentSupport = false;
this->mInterruptThrottle = clock();
#ifdef CUBIT_USE_THREADS
mThreadPool = new CubitThreadPool;
#else
mThreadPool = NULL;
#endif
}
| void AppUtil::apputil_getrusage | ( | struct rusage & | r_usage | ) | const |
Definition at line 418 of file AppUtil.cpp.
{
// get the resource usage as defined by getrusage
#ifndef JANUS
#ifndef _WIN32
getrusage(RUSAGE_SELF, &r_usage);
if (r_usage.ru_maxrss == 0) {
// this machine doesn't return rss - try going to /proc
// print the file name to open
#ifdef SOLARIS
char buffer[120];
strcpy(buffer, "/proc/self/psinfo");
int file_ptr = -1;
file_ptr = open(buffer, O_RDONLY);
if (file_ptr < 0) return;
struct psinfo myps_info;
read(file_ptr, &myps_info, sizeof(myps_info));
static int page_size = getpagesize();
r_usage.ru_maxrss = myps_info.pr_rssize*1024/page_size;
r_usage.ru_idrss = myps_info.pr_size*1024/page_size;
close (file_ptr);
#endif // SOLARIS
#ifdef CUBIT_LINUX
char file_str[4096], dum_str[4096];
int file_ptr = -1, file_len;
file_ptr = open("/proc/self/stat", O_RDONLY);
file_len = read(file_ptr, file_str, sizeof(file_str)-1);
if (file_len == 0) return;
close(file_ptr);
file_str[file_len] = '\0';
// read the preceeding fields and the ones we really want...
int dum_int;
unsigned int dum_uint, vm_size, rss;
static int page_size = getpagesize();
int num_fields = sscanf(file_str,
"%d " // pid
"%s " // comm
"%c " // state
"%d %d %d %d %d " // ppid, pgrp, session, tty, tpgid
"%u %u %u %u %u " // flags, minflt, cminflt, majflt, cmajflt
"%d %d %d %d %d %d " // utime, stime, cutime, cstime, counter, priority
"%u %u " // timeout, itrealvalue
"%d " // starttime
"%u %u", // vsize, rss
&dum_int,
dum_str,
dum_str,
&dum_int, &dum_int, &dum_int, &dum_int, &dum_int,
&dum_uint, &dum_uint, &dum_uint, &dum_uint, &dum_uint,
&dum_int, &dum_int, &dum_int, &dum_int, &dum_int, &dum_int,
&dum_uint, &dum_uint,
&dum_int,
&vm_size, &rss);
if (num_fields == 24) {
r_usage.ru_maxrss = rss/page_size;
r_usage.ru_idrss = vm_size/page_size;
}
#endif // CUBIT_LINUX
}
#endif // _WIN32
#endif // JANUS
}
| static CubitBoolean AppUtil::catch_interrupt | ( | ) | [inline, static] |
Definition at line 71 of file AppUtil.hpp.
{ return catching_sigint_; }
| void AppUtil::catch_interrupt | ( | CubitBoolean | yesno | ) | [static] |
Definition at line 316 of file AppUtil.cpp.
{
#ifndef CUBIT_NO_SIGNAL
if( yesno )
{
if( signal( SIGINT, sigint_handler ) == SIG_ERR )
PRINT_ERROR("Can't catch SIGINT!\n");
else
catching_sigint_ = CUBIT_TRUE;
}
else
{
if( signal( SIGINT, SIG_DFL ) == SIG_ERR )
PRINT_ERROR("Can't reset SIGINT handler!\n");
else
catching_sigint_ = CUBIT_FALSE;
}
#endif
}
| void AppUtil::clear_interrupt | ( | ) |
Definition at line 551 of file AppUtil.cpp.
{
cubit_intr = CUBIT_FALSE;
}
| bool AppUtil::concurrent_enabled | ( | ) | [inline] |
Definition at line 122 of file AppUtil.hpp.
{
return concurrentSupport;
}
| void AppUtil::delete_instance | ( | ) | [static] |
Definition at line 229 of file AppUtil.cpp.
| CubitEventDispatcher& AppUtil::event_dispatcher | ( | ) | [inline] |
Definition at line 112 of file AppUtil.hpp.
{ return mEventDispatcher; }
| CubitString AppUtil::get_app_dir | ( | ) | [inline] |
Get the location of the shared library or executable Returns the location of the cubit_util shared library if it is a shared library or if a static library compiled into an executable, gives the location of the executable.
Definition at line 162 of file AppUtil.hpp.
{
return cubitDir;
}
| bool AppUtil::get_terminal_size | ( | int & | rows, |
| int & | cols | ||
| ) |
Definition at line 482 of file AppUtil.cpp.
{
cols = term_width;
rows = term_height;
return rows || cols;
}
| void AppUtil::initialize_settings | ( | ) | [static] |
Definition at line 520 of file AppUtil.cpp.
| AppUtil * AppUtil::instance | ( | void | ) | [static] |
Definition at line 169 of file AppUtil.cpp.
{
if (instance_ == NULL)
{
instance_ = new AppUtil();
if ( !instance_ )
{
PRINT_ERROR(" *** Unable to initialize application ***\n");
exit(1);
}
// Initialize interrupted flag to false.
cubit_intr = CUBIT_FALSE;
cubit_update_terminal_size(0);
initialize_settings();
}
return instance_;
}
| AppUtil * AppUtil::instance_no_create | ( | ) | [static] |
Definition at line 161 of file AppUtil.cpp.
{
return instance_;
}
Definition at line 525 of file AppUtil.cpp.
{
if(this->mProgressTool)
{
clock_t new_clock = clock();
clock_t diff = new_clock - this->mInterruptThrottle;
if((diff / static_cast<double>(CLOCKS_PER_SEC)) > 0.1)
{
this->mInterruptThrottle = new_clock;
mProgressTool->check_interrupt();
}
}
return cubit_intr;
}
Definition at line 495 of file AppUtil.cpp.
{
assert(mProgressTool != NULL);
return mProgressTool;
}
| void AppUtil::progress_tool | ( | ProgressTool * | pTool | ) |
Definition at line 502 of file AppUtil.cpp.
{
assert(pTool != NULL); // existence is assumed elsewhere in the code
if (pTool)
{
if (mProgressTool)
{
delete mProgressTool;
}
mProgressTool = pTool;
}
}
| void AppUtil::report_resource_usage | ( | ) | const |
Definition at line 277 of file AppUtil.cpp.
{
#ifndef JANUS
#ifndef _WIN32
struct rusage r_usage;
float utime, stime;
apputil_getrusage(r_usage);
utime = (float)r_usage.ru_utime.tv_sec +
((float)r_usage.ru_utime.tv_usec/1.e6);
stime = (float)r_usage.ru_stime.tv_sec +
((float)r_usage.ru_stime.tv_usec/1.e6);
static int pagesize = getpagesize();
PRINT_INFO("\nEnd of Execution\n");
PRINT_INFO("User time = %f\n", utime);
PRINT_INFO("System time = %f\n", stime);
PRINT_INFO("Total time = %f\n", utime+stime);
PRINT_INFO("Max resident set size = %ld bytes\n", r_usage.ru_maxrss*pagesize);
PRINT_INFO("Int resident set size = %ld\n", r_usage.ru_idrss);
PRINT_INFO("Minor Page Faults = %ld\n", r_usage.ru_minflt);
PRINT_INFO("Major Page Faults = %ld\n", r_usage.ru_majflt);
PRINT_INFO("Swaps = %ld\n", r_usage.ru_nswap);
#endif// _WIN32
#endif//JANUS
}
| void AppUtil::send_event | ( | const T & | event | ) | [inline] |
send an event
Definition at line 116 of file AppUtil.hpp.
{
CubitObservable* obs = dynamic_cast<CubitObservable*>(event.get_entity());
this->send_event(obs, event);
}
| void AppUtil::send_event | ( | CubitObservable * | obs, |
| const CubitEvent & | event | ||
| ) | [private] |
Definition at line 556 of file AppUtil.cpp.
{
this->mEventDispatcher.send_event(observable, event);
}
| void AppUtil::set_interrupt | ( | CubitBoolean | f | ) |
Definition at line 541 of file AppUtil.cpp.
{
if(f)
{
// call raise so it works regardless of the current signal handler
raise(SIGINT);
}
cubit_intr = f;
}
| void AppUtil::set_terminal_size | ( | int | rows, |
| int | cols | ||
| ) |
Definition at line 489 of file AppUtil.cpp.
{
term_width = cols;
term_height = rows;
}
| int AppUtil::shutdown | ( | ) |
Definition at line 392 of file AppUtil.cpp.
{
// When the user is done, print out additional info if requested
if (DEBUG_FLAG(3))
report_resource_usage();
// Return the number of errors in the session
int ret_val = ( CubitMessage::instance()->error_count() );
if ( ret_val > 0 )
{
PRINT_ERROR("Errors found during CUBIT session.\n");
}
// Delete the singletons
CubitMessage::delete_instance();
SettingHandler::delete_instance();
#ifdef BUILD_WITH_CONCURRENT_SUPPORT
delete mConcurrentInstance;
#endif
mAppStarted = CUBIT_FALSE;
return ret_val;
}
| void AppUtil::startup | ( | ) |
Definition at line 337 of file AppUtil.cpp.
{
#ifndef NOT_AN_APP
if (mAppStarted)
return;
// get paths to binaries that AppUtil is compiled into
// we'll make this our "cubitDir" and can be used a reference for
// where Cubit is installed
#ifdef _WIN32
wchar_t path_buffer[PATH_MAX];
if(GetModuleFileNameW((HINSTANCE)&__ImageBase, path_buffer, PATH_MAX))
{
*wcsrchr(path_buffer, '\\') = '\0';
cubitDir = CubitString::toUtf8(path_buffer);
}
#else
Dl_info dl_info;
// Note: this is a nasty hack to avoid the warning:
// ISO C++ forbids casting between pointer-to-function and pointer-to-object
// Even with reinterpret_cast, this warning is still generated
// GCC accepts reinterpret_cast for purposes like in dlsym calls as an extension,
// but that might not work for other compilers
// This union-trick has been applied to some open source code, like:
// https://mail.gnome.org/archives/commits-list/2011-February/msg06409.html
// http://sourceforge.net/p/scstudio/mailman/message/29083334/
union {
void* ptr;
AppUtil* (*func)();
} cast_u;
cast_u.func = AppUtil::instance;
dladdr(cast_u.ptr, &dl_info);
CubitString path_buffer = dl_info.dli_fname;
size_t idx = path_buffer.find_last('/');
if(idx != CubitString::npos)
{
path_buffer = path_buffer.substr(0, idx);
}
cubitDir = path_buffer;
#endif
#ifdef BUILD_WITH_CONCURRENT_SUPPORT
mConcurrentInstance = new CubitQtConcurrent;
this->concurrentSupport = true;
#endif
mAppStarted = CUBIT_TRUE;
// add startup code here
// nothing to do for now
#endif /*NOT_AN_APP*/
return;
}
| CubitThreadPool * AppUtil::thread_pool | ( | ) |
Definition at line 515 of file AppUtil.cpp.
{
return mThreadPool;
}
CubitBoolean AppUtil::catching_sigint_ = CUBIT_FALSE [static, private] |
Definition at line 133 of file AppUtil.hpp.
CubitBoolean AppUtil::concurrentSupport [private] |
Definition at line 150 of file AppUtil.hpp.
CubitString AppUtil::cubitDir [private] |
Definition at line 141 of file AppUtil.hpp.
AppUtil * AppUtil::instance_ = NULL [static, private] |
Definition at line 138 of file AppUtil.hpp.
CubitBoolean AppUtil::mAppStarted [private] |
Definition at line 139 of file AppUtil.hpp.
Definition at line 146 of file AppUtil.hpp.
clock_t AppUtil::mInterruptThrottle [private] |
Definition at line 148 of file AppUtil.hpp.
ProgressTool* AppUtil::mProgressTool [private] |
Definition at line 144 of file AppUtil.hpp.
CubitThreadPool* AppUtil::mThreadPool [private] |
Definition at line 155 of file AppUtil.hpp.
int AppUtil::term_height [private] |
Definition at line 136 of file AppUtil.hpp.
int AppUtil::term_width [private] |
Definition at line 136 of file AppUtil.hpp.