mirror of
https://github.com/reactos/reactos.git
synced 2024-10-04 00:13:57 +00:00
- Implementation of mmTaskCreate. Based on patch by Eric Pouech.
svn path=/trunk/; revision=10146
This commit is contained in:
parent
f82a992ec2
commit
016e6a3f65
|
@ -449,6 +449,16 @@ BOOL WINAPI mciFreeCommandResource(UINT uTable);
|
|||
BOOL WINAPI DriverCallback(DWORD dwCallBack, UINT uFlags, HDRVR hDev,
|
||||
UINT wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2);
|
||||
|
||||
typedef void (*LPTASKCALLBACK)(DWORD dwInst);
|
||||
|
||||
#define TASKERR_NOTASKSUPPORT 1
|
||||
#define TASKERR_OUTOFMEMORY 2
|
||||
MMRESULT WINAPI mmTaskCreate(LPTASKCALLBACK, HANDLE*, DWORD);
|
||||
void WINAPI mmTaskBlock(HANDLE);
|
||||
BOOL WINAPI mmTaskSignal(HANDLE);
|
||||
void WINAPI mmTaskYield(void);
|
||||
HANDLE WINAPI mmGetCurrentTask(void);
|
||||
|
||||
#ifdef __WINESRC__
|
||||
#define WAVE_DIRECTSOUND 0x0080
|
||||
#endif
|
||||
|
|
|
@ -102,8 +102,9 @@ static void WINMM_DeleteIData(void)
|
|||
* inside WINMM_IData */
|
||||
CloseHandle(WINMM_IData->psStopEvent);
|
||||
CloseHandle(WINMM_IData->psLastEvent);
|
||||
WINMM_IData->cs.DebugInfo = NULL;
|
||||
DeleteCriticalSection(&WINMM_IData->cs);
|
||||
HeapFree(GetProcessHeap(), 0, WINMM_IData);
|
||||
HeapFree(GetProcessHeap(), 0, WINMM_IData);
|
||||
WINMM_IData = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -3176,3 +3177,49 @@ UINT WINAPI waveInMessage(HWAVEIN hWaveIn, UINT uMessage,
|
|||
|
||||
return MMDRV_Message(wmld, uMessage, dwParam1, dwParam2, TRUE);
|
||||
}
|
||||
|
||||
struct mm_starter
|
||||
{
|
||||
LPTASKCALLBACK cb;
|
||||
DWORD client;
|
||||
HANDLE event;
|
||||
};
|
||||
|
||||
DWORD WINAPI mmTaskRun(void* pmt)
|
||||
{
|
||||
struct mm_starter mms;
|
||||
|
||||
memcpy(&mms, pmt, sizeof(struct mm_starter));
|
||||
HeapFree(GetProcessHeap(), 0, pmt);
|
||||
mms.cb(mms.client);
|
||||
if (mms.event) SetEvent(mms.event);
|
||||
return 0;
|
||||
}
|
||||
|
||||
MMRESULT WINAPI mmTaskCreate(LPTASKCALLBACK cb, HANDLE* ph, DWORD client)
|
||||
{
|
||||
HANDLE hThread;
|
||||
HANDLE hEvent;
|
||||
struct mm_starter *mms;
|
||||
|
||||
mms = HeapAlloc(GetProcessHeap(), 0, sizeof(struct mm_starter));
|
||||
if (mms == NULL) { return TASKERR_OUTOFMEMORY; }
|
||||
|
||||
mms->cb = cb;
|
||||
mms->client = client;
|
||||
if (ph) {
|
||||
mms->event = hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
} else {
|
||||
mms->event = NULL;
|
||||
}
|
||||
|
||||
hThread = CreateThread(0, 0, mmTaskRun, (LPVOID)&mms, 0, NULL);
|
||||
if (!hThread) {
|
||||
HeapFree(GetProcessHeap(), 0, mms);
|
||||
CloseHandle(hEvent);
|
||||
return TASKERR_OUTOFMEMORY;
|
||||
}
|
||||
if (ph) *ph = hEvent;
|
||||
CloseHandle(hThread);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -135,6 +135,7 @@
|
|||
@ stdcall mmioStringToFOURCCW(wstr long)
|
||||
@ stdcall mmioWrite(long ptr long)
|
||||
@ stdcall mmsystemGetVersion()
|
||||
@ stdcall mmTaskCreate(ptr ptr long)
|
||||
@ stdcall sndPlaySoundA(ptr long)
|
||||
@ stdcall sndPlaySoundW(ptr long)
|
||||
@ stdcall timeBeginPeriod(long)
|
||||
|
|
Loading…
Reference in a new issue