RubyじゃなくてWindows APIのほう。
Unixだとノンプリエンティブなスレッドってどうやって使うんだろう?
#include <windows.h> #include <stdio.h> #include <stdlib.h> #define die(fmt, ...) \ do { \ fprintf(stderr, fmt, __VA_ARGS__); \ exit(1); \ } while(0) void _stdcall fiber(LPVOID mf) { while(1) { puts("春"); SwitchToFiber(mf); puts("夏"); SwitchToFiber(mf); puts("秋"); SwitchToFiber(mf); puts("冬"); SwitchToFiber(mf); } } int main() { LPVOID mf, f; mf = ConvertThreadToFiber(NULL); if (mf == NULL) { die("ConvertThreadToFiber failed: %d", GetLastError()); } f = CreateFiber(0, fiber, mf); if (f == NULL) { die("CreateFiber failed: %d", GetLastError()); } while(1) { printf("Hit Any Key!"); fgetc(stdin); SwitchToFiber(f); } return 0; }
Hit Any Key!
春
Hit Any Key!
夏
Hit Any Key!
秋
Hit Any Key!
冬
Hit Any Key!
春
Hit Any Key!
夏
Hit Any Key!
・
・
・