[Development] A new approach for Qt main()
Morten Sorvig
Morten.Sorvig at qt.io
Mon Dec 12 22:12:31 CET 2016
> On 9 Dec 2016, at 18:05, Thiago Macieira <thiago.macieira at intel.com> wrote:
>
> Em sexta-feira, 9 de dezembro de 2016, às 10:44:24 PST, Lars Knoll escreveu:
>> Well, the problem is that the main() entry point is causing huge amounts of
>> issues on at least Android and iOS. We’d help those platforms a lot if we
>> didn’t support this kind of entry point (on those platforms) anymore. But I
>> agree that we can’t break this in Qt 5, but we can prepare for Qt6.
>>
>> I’d propose to define a new entry point that works better on these platforms
>> and offering that as the recommended way for new apps. The best solution is
>> probably a static library that provides callbacks that can be used to
>> initialize things.
>
> Can we get a description of what those problems are, for those of us who have
> never developed anything for those OSes, so we're not discussing things in the
> abstract?
For some background, here’s what typical application startup looks like on macOS, NaCl, and Emscripten:
macOS: Define the application delegate, create instance of it in main()
// Define application delegate with app lifecycle callbacks
@interface AppDelegate ()
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Init application here
}
- (void)applicationWillTerminate:(NSNotification *)aNotification {
// Tear down here
}
@end
// In main, install application delegate and start the app
int main(int argc, const char *argv[])
{
NSApplication *app = [NSApplication sharedApplication];
app.delegate = [[AppDelegate alloc] initWithArgc:argc argv:argv];
return NSApplicationMain(argc, argv);
}
Native Client: Define pp::CreateModule() and return the application module (which is a
subclass of pp::Module)
namespace pp {
Module* CreateModule() {
return new ApplicationModule();
}
}
Emscripten: implement main()
int main(int argc, const char *argv[) {
// Init application here
return 0;
}
main() should/must return to keep the web page responsive. There is API for
simulating a main that does not return and preserve the stack, see emscripten_set_main_loop()
in the emscripten documentation.
Morten
More information about the Development
mailing list