source: trunk/src/kernel32/thread.cpp@ 4

Last change on this file since 4 was 4, checked in by ktk, 26 years ago

Import

File size: 4.9 KB
Line 
1/* $Id: thread.cpp,v 1.1 1999-05-24 20:19:48 ktk Exp $ */
2
3/*
4 *
5 * Project Odin Software License can be found in LICENSE.TXT
6 *
7 */
8/*
9 * Win32 Thread API functions
10 *
11 * Copyright 1998 Sander van Leeuwen (sandervl@xs4all.nl)
12 *
13 */
14#include <os2win.h>
15#include <stdarg.h>
16#include "thread.h"
17#include "except.h"
18
19static DWORD OPEN32API Win32ThreadProc(LPVOID lpData);
20
21
22//******************************************************************************
23//******************************************************************************
24HANDLE WIN32API CreateThread(LPSECURITY_ATTRIBUTES lpsa, DWORD cbStack,
25 LPTHREAD_START_ROUTINE lpStartAddr,
26 LPVOID lpvThreadParm, DWORD fdwCreate,
27 LPDWORD lpIDThread)
28{
29 Win32Thread *winthread = new Win32Thread(lpStartAddr, lpvThreadParm);
30
31 if(winthread == 0)
32 return(0);
33
34 dprintf(("CreateThread\n"));
35 return(O32_CreateThread(lpsa, cbStack, winthread->GetOS2Callback(), (LPVOID)winthread, fdwCreate, lpIDThread));
36}
37//******************************************************************************
38//******************************************************************************
39DWORD WIN32API GetCurrentThreadId()
40{
41 dprintf(("GetCurrentThreadId\n"));
42 return(O32_GetCurrentThreadId());
43}
44//******************************************************************************
45//******************************************************************************
46HANDLE WIN32API GetCurrentThread()
47{
48//// dprintf(("GetCurrentThread\n"));
49 return(O32_GetCurrentThread());
50}
51//******************************************************************************
52//******************************************************************************
53BOOL WIN32API GetExitCodeThread(HANDLE hThread, LPDWORD arg2)
54{
55 dprintf(("GetExitCodeThread\n"));
56 return O32_GetExitCodeThread(hThread, arg2);
57}
58//******************************************************************************
59//******************************************************************************
60BOOL WIN32API TerminateThread(HANDLE hThread, DWORD arg2)
61{
62 dprintf(("TerminateThread\n"));
63 return O32_TerminateThread(hThread, arg2);
64}
65//******************************************************************************
66//******************************************************************************
67DWORD WIN32API ResumeThread(HANDLE hThread)
68{
69 dprintf(("ResumeThread\n"));
70 return O32_ResumeThread(hThread);
71}
72//******************************************************************************
73//******************************************************************************
74INT WIN32API GetThreadPriority(HANDLE hThread)
75{
76 dprintf(("OS2GetThreadPriority\n"));
77 return O32_GetThreadPriority(hThread);
78}
79//******************************************************************************
80//******************************************************************************
81DWORD WIN32API SuspendThread(HANDLE hThread)
82{
83 dprintf(("OS2SuspendThread\n"));
84 return O32_SuspendThread(hThread);
85}
86//******************************************************************************
87//******************************************************************************
88BOOL WIN32API SetThreadPriority(HANDLE hThread, int priority)
89{
90 dprintf(("OS2SetThreadPriority\n"));
91 return O32_SetThreadPriority(hThread, priority);
92}
93//******************************************************************************
94//******************************************************************************
95VOID WIN32API ExitThread(DWORD exitcode)
96{
97 dprintf(("ExitThread\n"));
98 O32_ExitThread(exitcode);
99}
100//******************************************************************************
101//******************************************************************************
102Win32Thread::Win32Thread(LPTHREAD_START_ROUTINE pUserCallback, LPVOID lpData)
103{
104 lpUserData = lpData;
105 pCallback =pUserCallback;
106}
107//******************************************************************************
108//******************************************************************************
109Win32Thread::~Win32Thread()
110{
111
112}
113//******************************************************************************
114//******************************************************************************
115PTHREAD_START_ROUTINE_O32 Win32Thread::GetOS2Callback()
116{
117 return Win32ThreadProc;
118}
119//******************************************************************************
120//******************************************************************************
121static DWORD OPEN32API Win32ThreadProc(LPVOID lpData)
122{
123 Win32Thread *me = (Win32Thread *)lpData;
124 WIN32THREADPROC winthread = me->pCallback;
125 LPVOID userdata = me->lpUserData;
126
127 delete me; //only called once
128
129 dprintf(("Win32ThreadProc %d\n", GetCurrentThreadId()));
130 ReplaceExceptionHandler();
131 return(winthread(userdata));
132}
133//******************************************************************************
134//******************************************************************************
Note: See TracBrowser for help on using the repository browser.