X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fglws_cocoa.mm;h=e410862f1996aa278d64db22c2ec3ba4eac81694;hb=c8695f74ce1ee6a93dee4b3f7da5a70a64706c82;hp=df7dd84018171b298532021200595903b31d40a5;hpb=808f1ccdb87a7962ae3f7c149c0e031b24f150c3;p=apitrace diff --git a/retrace/glws_cocoa.mm b/retrace/glws_cocoa.mm index df7dd84..e410862 100644 --- a/retrace/glws_cocoa.mm +++ b/retrace/glws_cocoa.mm @@ -33,6 +33,8 @@ * - http://developer.apple.com/library/mac/#samplecode/glut/Introduction/Intro.html * - http://developer.apple.com/library/mac/#samplecode/GLEssentials/Introduction/Intro.html * - http://www.glfw.org/ + * - http://cocoasamurai.blogspot.co.uk/2008/04/guide-to-threading-on-leopard.html + * - http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html */ @@ -48,6 +50,27 @@ #include "glws.hpp" +/** + * Dummy thread to force Cocoa to enter multithreading mode. + */ +@interface DummyThread : NSObject + + (void)enterMultiThreaded; + + (void)dummyThreadMethod:(id)unused; +@end + +@implementation DummyThread + + (void)dummyThreadMethod:(id)unused { + (void)unused; + } + + + (void)enterMultiThreaded { + [NSThread detachNewThreadSelector:@selector(dummyThreadMethod:) + toTarget:self + withObject:nil]; + } +@end + + namespace glws { @@ -174,6 +197,14 @@ init(void) { initThread(); + [DummyThread enterMultiThreaded]; + + bool isMultiThreaded = [NSThread isMultiThreaded]; + if (!isMultiThreaded) { + std::cerr << "error: failed to enable Cocoa multi-threading\n"; + exit(1); + } + [NSApplication sharedApplication]; [NSApp finishLaunching];