forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			36 lines
		
	
	
		
			815 B
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			36 lines
		
	
	
		
			815 B
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#include <kinc/threads/fiber.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								VOID WINAPI fiber_func(LPVOID param) {
							 | 
						||
| 
								 | 
							
								#ifndef KINC_WINDOWSAPP
							 | 
						||
| 
								 | 
							
									kinc_fiber_t *fiber = (kinc_fiber_t *)param;
							 | 
						||
| 
								 | 
							
									fiber->impl.func(fiber->impl.param);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_fiber_init_current_thread(kinc_fiber_t *fiber) {
							 | 
						||
| 
								 | 
							
								#ifndef KINC_WINDOWSAPP
							 | 
						||
| 
								 | 
							
									fiber->impl.fiber = ConvertThreadToFiber(NULL);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_fiber_init(kinc_fiber_t *fiber, void (*func)(void *param), void *param) {
							 | 
						||
| 
								 | 
							
								#ifndef KINC_WINDOWSAPP
							 | 
						||
| 
								 | 
							
									fiber->impl.func = func;
							 | 
						||
| 
								 | 
							
									fiber->impl.param = param;
							 | 
						||
| 
								 | 
							
									fiber->impl.fiber = CreateFiber(0, fiber_func, fiber);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_fiber_destroy(kinc_fiber_t *fiber) {
							 | 
						||
| 
								 | 
							
								#ifndef KINC_WINDOWSAPP
							 | 
						||
| 
								 | 
							
									DeleteFiber(fiber->impl.fiber);
							 | 
						||
| 
								 | 
							
									fiber->impl.fiber = NULL;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_fiber_switch(kinc_fiber_t *fiber) {
							 | 
						||
| 
								 | 
							
								#ifndef KINC_WINDOWSAPP
							 | 
						||
| 
								 | 
							
									SwitchToFiber(fiber->impl.fiber);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								}
							 |