mirror of
https://github.com/whoahq/whoa.git
synced 2026-02-01 00:02:45 +03:00
feat(async): add AsyncFileReadCancel
This commit is contained in:
parent
4959fafac7
commit
45c632781b
@ -6,6 +6,10 @@
|
||||
#include <common/Prop.hpp>
|
||||
#include <common/Time.hpp>
|
||||
|
||||
void DefaultAsyncObjectCleanupCallback(CAsyncObject* object) {
|
||||
AsyncFileReadDestroyObject(object);
|
||||
}
|
||||
|
||||
CAsyncObject* AsyncFileReadAllocObject() {
|
||||
AsyncFileRead::s_queueLock.Enter();
|
||||
|
||||
@ -37,6 +41,33 @@ CAsyncObject* AsyncFileReadAllocObject() {
|
||||
return object;
|
||||
}
|
||||
|
||||
int32_t AsyncFileReadCancel(CAsyncObject* object, void (*cleanupCallback)(CAsyncObject* object)) {
|
||||
AsyncFileRead::s_queueLock.Enter();
|
||||
|
||||
if (object->isCurrent) {
|
||||
object->userArg = object;
|
||||
|
||||
if (!cleanupCallback) {
|
||||
cleanupCallback = &DefaultAsyncObjectCleanupCallback;
|
||||
}
|
||||
|
||||
object->userFailedCallback = reinterpret_cast<ASYNC_CALLBACK>(cleanupCallback);
|
||||
object->userPostloadCallback = reinterpret_cast<ASYNC_CALLBACK>(cleanupCallback);
|
||||
|
||||
AsyncFileRead::s_queueLock.Leave();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
SFile::Close(object->file);
|
||||
|
||||
AsyncFileRead::s_asyncFileReadFreeList.LinkToHead(object);
|
||||
|
||||
AsyncFileRead::s_queueLock.Leave();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void AsyncFileReadDestroyObject(CAsyncObject* object) {
|
||||
AsyncFileRead::s_queueLock.Enter();
|
||||
|
||||
|
||||
@ -5,6 +5,8 @@
|
||||
|
||||
CAsyncObject* AsyncFileReadAllocObject();
|
||||
|
||||
int32_t AsyncFileReadCancel(CAsyncObject* object, void (*cleanupCallback)(CAsyncObject* object));
|
||||
|
||||
void AsyncFileReadDestroyObject(CAsyncObject* object);
|
||||
|
||||
void AsyncFileReadInitialize(uint32_t threadSleep, uint32_t handlerTimeout);
|
||||
|
||||
@ -6,6 +6,8 @@
|
||||
class SFile;
|
||||
class CAsyncQueue;
|
||||
|
||||
typedef void (*ASYNC_CALLBACK)(void*);
|
||||
|
||||
class CAsyncObject {
|
||||
public:
|
||||
// Member variables
|
||||
@ -13,8 +15,8 @@ class CAsyncObject {
|
||||
void* buffer;
|
||||
uint32_t size;
|
||||
void* userArg;
|
||||
void (*userPostloadCallback)(void*);
|
||||
void (*userFailedCallback)(void*);
|
||||
ASYNC_CALLBACK userPostloadCallback;
|
||||
ASYNC_CALLBACK userFailedCallback;
|
||||
CAsyncQueue* queue;
|
||||
void* ptr1C;
|
||||
uint8_t priority;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user