createWindow($title, 400, 350, $x, $y); // Create UI $container = new \PHPNative\Ui\Widget\Container("flex flex-col p-6 gap-4 bg-$bgColor-100"); $titleLabel = new \PHPNative\Ui\Widget\Label( text: $title, style: "text-2xl text-$bgColor-900" ); $infoLabel = new \PHPNative\Ui\Widget\Label( text: 'Running in separate thread', style: "text-sm text-$bgColor-700" ); $frameLabel = new \PHPNative\Ui\Widget\Label( text: 'Frame: 0', style: "text-base text-$bgColor-600" ); $button = new \PHPNative\Ui\Widget\Button( text: 'Click Me!', style: "bg-$bgColor-500 hover:bg-$bgColor-700 text-white p-4 rounded-lg" ); $clickCount = 0; $button->setOnClick(function() use (&$clickCount, $button, $title) { $clickCount++; $button->setText("Clicked $clickCount times"); echo "$title - Button clicked! Count: $clickCount\n"; }); $closeButton = new \PHPNative\Ui\Widget\Button( text: 'Close Window', style: "bg-red-500 hover:bg-red-700 text-white p-3 rounded" ); $closeButton->setOnClick(function() use ($window) { $window->close(); }); $container->addComponent($titleLabel); $container->addComponent($infoLabel); $container->addComponent($frameLabel); $container->addComponent($button); $container->addComponent($closeButton); $window->setRoot($container); // Custom run loop with frame counter $frameCount = 0; while (!$window->shouldClose()) { $frameCount++; $frameLabel->setText("Frame: $frameCount"); $window->layout(); // Poll events rgfw_pollEvents(); $window->handleEvents(); // Update \PHPNative\Async\TaskManager::getInstance()->update(); $window->update(); // Render $window->render(); // ~60 FPS usleep(16666); } // Cleanup $window->cleanup(); return "$title closed after $frameCount frames"; }; try { // Launch Window 1 (Blue) in thread echo "Launching Window 1 (Blue) in thread...\n"; $runtime1 = new Runtime(); $future1 = $runtime1->run($windowRunner, [ 'Window 1 - Blue', 100, 100, 'blue' ]); // Launch Window 2 (Green) in thread echo "Launching Window 2 (Green) in thread...\n"; $runtime2 = new Runtime(); $future2 = $runtime2->run($windowRunner, [ 'Window 2 - Green', 550, 100, 'green' ]); echo "\nBoth windows launched in parallel threads!\n"; echo "Each window has its own event loop\n"; echo "Try clicking the buttons and closing windows\n"; echo "Main thread waiting for windows to close...\n\n"; // Wait for both windows to complete echo "Waiting for Window 1...\n"; $result1 = $future1->value(); echo $result1 . "\n"; echo "Waiting for Window 2...\n"; $result2 = $future2->value(); echo $result2 . "\n"; echo "\nAll windows closed. Application exiting.\n"; } catch (\Throwable $e) { echo "Error: " . $e->getMessage() . "\n"; echo "Stack trace:\n" . $e->getTraceAsString() . "\n"; }