int main() { OS_Start(); //TASK Create TASK_Create(task1,1,2); TASK_Create(task2,2,5); TASK_Create(task3,5,6); while(1) { timer1++; TASK_Excute(); printf("%d\n",timer1); sleep(1); } return 0; }
/*********************************************************************** * TASK_CreateMainTask * * Create a task for the main (32-bit) process. */ void TASK_CreateMainTask(void) { TDB *pTask; STARTUPINFOA startup_info; UINT cmdShow = 1; /* SW_SHOWNORMAL but we don't want to include winuser.h here */ GetStartupInfoA( &startup_info ); if (startup_info.dwFlags & STARTF_USESHOWWINDOW) cmdShow = startup_info.wShowWindow; pTask = TASK_Create( NULL, cmdShow, NULL, 0 ); if (!pTask) { ERR("could not create task for main process\n"); ExitProcess(1); } pTask->flags |= TDBF_WIN32; pTask->hInstance = 0; pTask->hPrevInstance = 0; pTask->teb = NtCurrentTeb(); /* Add the task to the linked list */ /* (no need to get the win16 lock, we are the only thread at this point) */ TASK_LinkTask( pTask->hSelf ); main_task = pTask->hSelf; }
/*********************************************************************** * TASK_SpawnTask * * Spawn a new 16-bit task. */ HTASK16 TASK_SpawnTask( NE_MODULE *pModule, WORD cmdShow, LPCSTR cmdline, BYTE len, HANDLE *hThread ) { struct create_data *data = NULL; WIN16_SUBSYSTEM_TIB *tib; TDB *pTask; if (!(pTask = TASK_Create( pModule, cmdShow, cmdline, len ))) return 0; if (!(tib = allocate_win16_tib( pTask ))) goto failed; if (!(data = HeapAlloc( GetProcessHeap(), 0, sizeof(*data)))) goto failed; data->task = pTask; data->tib = tib; if (!(*hThread = CreateThread( NULL, 0, task_start, data, 0, NULL ))) goto failed; return pTask->hSelf; failed: if (tib) free_win16_tib( tib ); HeapFree( GetProcessHeap(), 0, data ); TASK_DeleteTask( pTask->hSelf ); return 0; }