view dstep/coreservices/carboncore/Threads.d @ 11:07194b026fa4

Added bindings to a couple of frameworks, new license + some other things
author Jacob Carlborg <doob@me.com>
date Sat, 01 Aug 2009 15:03:28 +0200
parents
children
line wrap: on
line source

/**
 * Copyright: Copyright (c) 2009 Jacob Carlborg.
 * Authors: Jacob Carlborg
 * Version: Initial created: Jul 21, 2009 
 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
 */
module dstep.coreservices.carboncore.Threads;

//import dstep.AvailabilityMacros;
import dstep.coreservices.carboncore.MacErrors;
import dstep.coreservices.carboncore.MacTypes;
import dstep.coreservices.carboncore.MixedMode;

alias ushort ThreadState;
alias void* ThreadTaskRef;
alias uint ThreadStyle;
alias uint ThreadID;
alias uint ThreadOptions;
alias SchedulerInfoRec* SchedulerInfoRecPtr;
alias void* voidPtr;
alias ThreadEntryProcPtr ThreadEntryUPP;
alias ThreadSchedulerProcPtr ThreadSchedulerUPP;
alias ThreadSwitchProcPtr ThreadSwitchUPP;
alias ThreadTerminationProcPtr ThreadTerminationUPP;
alias DebuggerNewThreadProcPtr DebuggerNewThreadUPP;
alias DebuggerDisposeThreadProcPtr DebuggerDisposeThreadUPP;
alias DebuggerThreadSchedulerProcPtr DebuggerThreadSchedulerUPP;
alias ThreadEntryUPP ThreadEntryTPP;
alias ThreadSchedulerUPP ThreadSchedulerTPP;
alias ThreadSwitchUPP ThreadSwitchTPP;
alias ThreadTerminationUPP ThreadTerminationTPP;
alias DebuggerNewThreadUPP DebuggerNewThreadTPP;
alias DebuggerDisposeThreadUPP DebuggerDisposeThreadTPP;
alias DebuggerThreadSchedulerUPP DebuggerThreadSchedulerTPP;

extern (C)
{
	alias uint function (SchedulerInfoRecPtr) ThreadSchedulerProcPtr;
	alias void function (uint, void*) ThreadTerminationProcPtr;
	alias void function (uint, void*) ThreadSwitchProcPtr;
	alias void function (uint) DebuggerDisposeThreadProcPtr;
	alias voidPtr function (void*) ThreadEntryProcPtr;
	alias uint function (SchedulerInfoRecPtr) DebuggerThreadSchedulerProcPtr;
	alias void function (uint) DebuggerNewThreadProcPtr;
}

enum
{
	kReadyThreadState = 0,
	kStoppedThreadState = 1,
	kRunningThreadState = 2
}

enum
{
	kCooperativeThread = 1L << 0,
	kPreemptiveThread = 1L << 1
}

enum
{
	kNoThreadID = 0,
	kCurrentThreadID = 1,
	kApplicationThreadID = 2
}

enum
{
	kNewSuspend = (1 << 0),
	kUsePremadeThread = (1 << 1),
	kCreateIfNeeded = (1 << 2),
	kFPUNotNeeded = (1 << 3),
	kExactMatchThread = (1 << 4)
}

struct SchedulerInfoRec
{
	uint InfoRecSize;
	uint CurrentThreadID;
	uint SuggestedThreadID;
	uint InterruptedCoopThreadID;
}

extern (C)
{
	ThreadEntryUPP NewThreadEntryUPP (ThreadEntryProcPtr userRoutine);
	ThreadSchedulerUPP NewThreadSchedulerUPP (ThreadSchedulerProcPtr userRoutine);
	ThreadSwitchUPP NewThreadSwitchUPP (ThreadSwitchProcPtr userRoutine);
	ThreadTerminationUPP NewThreadTerminationUPP (ThreadTerminationProcPtr userRoutine);
	DebuggerNewThreadUPP NewDebuggerNewThreadUPP (DebuggerNewThreadProcPtr userRoutine);
	DebuggerDisposeThreadUPP NewDebuggerDisposeThreadUPP (DebuggerDisposeThreadProcPtr userRoutine);
	DebuggerThreadSchedulerUPP NewDebuggerThreadSchedulerUPP (DebuggerThreadSchedulerProcPtr userRoutine);
	void DisposeThreadEntryUPP (ThreadEntryUPP userUPP);
	void DisposeThreadSchedulerUPP (ThreadSchedulerUPP userUPP);
	void DisposeThreadSwitchUPP (ThreadSwitchUPP userUPP);
	void DisposeThreadTerminationUPP (ThreadTerminationUPP userUPP);
	void DisposeDebuggerNewThreadUPP (DebuggerNewThreadUPP userUPP);
	void DisposeDebuggerDisposeThreadUPP (DebuggerDisposeThreadUPP userUPP);
	void DisposeDebuggerThreadSchedulerUPP (DebuggerThreadSchedulerUPP userUPP);
	voidPtr InvokeThreadEntryUPP (void* threadParam, ThreadEntryUPP userUPP);
	uint InvokeThreadSchedulerUPP (SchedulerInfoRecPtr schedulerInfo, ThreadSchedulerUPP userUPP);
	void InvokeThreadSwitchUPP (uint threadBeingSwitched, void* switchProcParam, ThreadSwitchUPP userUPP);
	void InvokeThreadTerminationUPP (uint threadTerminated, void* terminationProcParam, ThreadTerminationUPP userUPP);
	void InvokeDebuggerNewThreadUPP (uint threadCreated, DebuggerNewThreadUPP userUPP);
	void InvokeDebuggerDisposeThreadUPP (uint threadDeleted, DebuggerDisposeThreadUPP userUPP);
	uint InvokeDebuggerThreadSchedulerUPP (SchedulerInfoRecPtr schedulerInfo, DebuggerThreadSchedulerUPP userUPP);
	short NewThread (uint threadStyle, ThreadEntryTPP threadEntry, void* threadParam, int stackSize, uint options, void** threadResult, ThreadID* threadMade);
	short SetThreadScheduler (ThreadSchedulerTPP threadScheduler);
	short SetThreadSwitcher (uint thread, ThreadSwitchTPP threadSwitcher, void* switchProcParam, ubyte inOrOut);
	short SetThreadTerminator (uint thread, ThreadTerminationTPP threadTerminator, void* terminationProcParam);
	short SetDebuggerNotificationProcs (DebuggerNewThreadTPP notifyNewThread, DebuggerDisposeThreadTPP notifyDisposeThread, DebuggerThreadSchedulerTPP notifyThreadScheduler);
	short CreateThreadPool (uint threadStyle, short numToCreate, int stackSize);
	short GetDefaultThreadStackSize (uint threadStyle, Size* stackSize);
	short ThreadCurrentStackSpace (uint thread, ByteCount* freeStack);
	short DisposeThread (uint threadToDump, void* threadResult, ubyte recycleThread);
	short YieldToThread (uint suggestedThread);
	short YieldToAnyThread ();
	short GetCurrentThread (ThreadID* currentThreadID);
	short GetThreadState (uint threadToGet, ThreadState* threadState);
	short SetThreadState (uint threadToSet, ushort newState, uint suggestedThread);
	short SetThreadStateEndCritical (uint threadToSet, ushort newState, uint suggestedThread);
	short ThreadBeginCritical ();
	short ThreadEndCritical ();
	short GetThreadCurrentTaskRef (ThreadTaskRef* threadTRef);
	short GetThreadStateGivenTaskRef (ThreadTaskRef threadTRef, uint threadToGet, ThreadState* threadState);
	short SetThreadReadyGivenTaskRef (ThreadTaskRef threadTRef, uint threadToSet);
}