omni::application::run
NAME

omni::application::run

A function of omni::application

#include <omni/application.hpp>
int omni::application::run(const int& argc, const wchar_t** argv, const omni::sync::parameterized_thread_start& start_func, omni::generic_ptr targs, bool exit_with_work_thread, bool kill_worker_on_signal)

SYNOPSIS

Starts the main application thread loop.

top

DESCRIPTION

This function is part of the application framework that allows you to hook in to certain system level functionality, as well as have access to other long running application contexts. This function will pause the main application until one of either omni::application::exit or omni::application::stop are called, or an exception is thrown and not caught. Along with the other variants of the run function, you can simplify argument and main program loop handling for global and multi-threaded environments in a more simplified way.

top

RETURN VALUES

The exit code set by omni::application::set_return_code, or 0 if none is set.

top


PARAMETERS

argc - Passes the argument count from the command line to the underlying omni::application::argparser instance. argv - Passes the argument array from the command line to the underlying omni::application::argparser instance. start_func - An omni::sync::parameterized_thread_start function object that will be called after the application context has been successfully created and started. targs - The arguments to pass to the thread start function. exit_with_work_thread - If this is true then the main application loop will exit when the user function passed in has completed. If this is false then the main application loop will not exit until it is signaled via the system (i.e. SIGINT, etc.), or until omni::application::exit or omni::application::stop are called. kill_worker_on_signal - If this is true and the background application thread is still active when a signal is received, it is forcefully killed. If this happens, the application will be in an undefined state as forcefully killing a thread is not guaranteed to stop the thread.

top


ERRORS

Since run need only be called once, if it is called again after being called at program start, it will throw an omni::exceptions::invalid_application_state as calling run more than once will cause the system to get into an undefined state.

top


CONSIDERATIONS

You cannot utilize the signal or application handlers unless this or one of its variants are called in the main function of your code or library initialization routine.

top


NOTES

If OMNI_NO_BASE_SETLOCALE is not defined, then the setlocale function is called with a category LC_ALL and an empty locale. If you wish to specify which category and locale to utilize, you can define OMNI_BASE_LOCALE_CATEGORY and OMNI_BASE_LOCALE

top