Files
tp/include/JSystem/JKernel/JKRThread/JKRThread.h
T

100 lines
3.0 KiB
C++
Raw Normal View History

#ifndef __JKRTHREAD_H__
#define __JKRTHREAD_H__
#include "JSystem/JKernel/JKRDisposer/JKRDisposer.h"
2020-12-26 11:31:49 -05:00
#include "dolphin/types.h"
2020-12-06 06:40:34 +01:00
#include "global.h"
class JKRThreadName_;
class JUTConsole;
class JKRHeap;
class JKRThread : JKRDisposer {
2020-12-26 11:31:49 -05:00
public:
JKRThread(u32 stack_size, int message_count, int param_3);
JKRThread(JKRHeap* heap, u32 stack_size, int message_count, int param_4);
JKRThread(OSThread* thread, int message_count);
virtual ~JKRThread();
2020-12-06 21:02:25 +01:00
/* vt[03] */ virtual void* run();
void setCommon_mesgQueue(JKRHeap* heap, int message_count);
void setCommon_heapSpecified(JKRHeap* heap, u32 stack_size, int param_3);
2021-01-03 22:19:54 +01:00
OSThread* getThreadRecord() const { return mThreadRecord; }
void* getStack() const { return mStackMemory; }
u8 getLoadInfo() const { return field_0x60; }
JKRHeap* getCurrentHeap() const { return mCurrentHeap; }
JKRHeap* getCurrentHeapError() const { return mCurrentHeapError; }
void resume() { OSResumeThread(mThreadRecord); }
void sendMessage(OSMessage message) {
OSSendMessage(&mMessageQueue, message, OS_MESSAGE_NON_BLOCKING);
}
void sendMessageBlock(OSMessage message) {
OSSendMessage(&mMessageQueue, message, OS_MESSAGE_BLOCKING);
}
OSMessage waitMessage() {
OSMessage message;
OSReceiveMessage(&mMessageQueue, &message, OS_MESSAGE_NON_BLOCKING);
return message;
}
OSMessage waitMessageBlock() {
OSMessage message;
OSReceiveMessage(&mMessageQueue, &message, OS_MESSAGE_BLOCKING);
return message;
}
void jamMessageBlock(OSMessage message) {
OSJamMessage(&mMessageQueue, message, OS_MESSAGE_BLOCKING);
}
2020-12-26 11:31:49 -05:00
private:
2021-01-03 22:19:54 +01:00
/* 0x00 */ // vtable
/* 0x04 */ // JKRDisposer
/* 0x18 */ JSULink<JKRThread> mThreadListLink;
/* 0x28 */ JKRHeap* mHeap;
/* 0x2C */ OSThread* mThreadRecord;
/* 0x30 */ OSMessageQueue mMessageQueue;
/* 0x50 */ OSMessage* mMessages;
/* 0x54 */ s32 mMessageCount;
/* 0x58 */ void* mStackMemory;
/* 0x5C */ u32 mStackSize;
/* 0x60 */ u8 field_0x60;
/* 0x61 */ u8 padding_0x61[3];
/* 0x64 */ u32 mCost;
/* 0x68 */ u32 mSwitchCount;
/* 0x6C */ u32 field_0x6c;
/* 0x70 */ u32 field_0x70;
/* 0x74 */ JKRHeap* mCurrentHeap;
/* 0x78 */ JKRHeap* mCurrentHeapError;
2020-12-06 21:02:25 +01:00
2020-12-26 11:31:49 -05:00
public:
2020-12-06 21:02:25 +01:00
static void* start(void* param_1);
static JKRThread* searchThread(OSThread* thread);
2020-12-26 11:31:49 -05:00
static JSUList<JKRThread>* getList() { return &lbl_8043428C; }
};
class JKRThreadSwitch {
2020-12-26 11:31:49 -05:00
public:
JKRThreadSwitch(JKRHeap*);
virtual ~JKRThreadSwitch();
static JKRThreadSwitch* createManager(JKRHeap* heap);
JKRThread* enter(JKRThread* param_1, int param_2);
static void callback(OSThread* param_1, OSThread* param_2);
void draw(JKRThreadName_* param_1, JUTConsole* param_2);
void draw(JKRThreadName_* param_1);
2020-12-26 11:31:49 -05:00
public:
JKRHeap* heap;
u8 field_0x8[4];
u32 field_0xC[2];
u8 field_0x14[4];
u32 field_0x18;
u32 field_0x1C;
u32 field_0x20;
u32 field_0x24;
};
#endif