Skip to content

Instantly share code, notes, and snippets.

@NK-Nikunj
Created March 14, 2018 18:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save NK-Nikunj/6dfd6bdb18b02645c44eb79c96524f3b to your computer and use it in GitHub Desktop.
Save NK-Nikunj/6dfd6bdb18b02645c44eb79c96524f3b to your computer and use it in GitHub Desktop.
Running main on an hpx thread
#include <hpx/hpx.hpp>
#include <hpx/hpx_init.hpp>
#include <stdlib.h>
int __argc = 0;
char** __argv = nullptr;
void set_argc_argv(int argc, char* argv[], char* env[])
{
__argc = argc;
__argv = argv;
}
__attribute__((section(".preinit_array")))
void (*set_global_argc_argv)(int, char*[], char*[]) = &set_argc_argv;
int main(int argc, char* argv[]);
struct manage_global_runtime {
manage_global_runtime() {
std::cout << "calling from struct" << std::endl;
hpx::init(main, __argc, __argv);
std::cout << "back in struct" << std::endl;
exit(1);
}
};
manage_global_runtime init;
int universal_ans(){
return 42;
}
int main(int argc, char* argv[])
{
std::cout << "Hello World!" << std::endl;
hpx::future<int> f = hpx::async(universal_ans);
int ans = f.get();
std::cout << ans << std::endl;
return hpx::finalize();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment