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/Prop.hpp>
|
||||||
#include <common/Time.hpp>
|
#include <common/Time.hpp>
|
||||||
|
|
||||||
|
void DefaultAsyncObjectCleanupCallback(CAsyncObject* object) {
|
||||||
|
AsyncFileReadDestroyObject(object);
|
||||||
|
}
|
||||||
|
|
||||||
CAsyncObject* AsyncFileReadAllocObject() {
|
CAsyncObject* AsyncFileReadAllocObject() {
|
||||||
AsyncFileRead::s_queueLock.Enter();
|
AsyncFileRead::s_queueLock.Enter();
|
||||||
|
|
||||||
@ -37,6 +41,33 @@ CAsyncObject* AsyncFileReadAllocObject() {
|
|||||||
return object;
|
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) {
|
void AsyncFileReadDestroyObject(CAsyncObject* object) {
|
||||||
AsyncFileRead::s_queueLock.Enter();
|
AsyncFileRead::s_queueLock.Enter();
|
||||||
|
|
||||||
|
|||||||
@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
CAsyncObject* AsyncFileReadAllocObject();
|
CAsyncObject* AsyncFileReadAllocObject();
|
||||||
|
|
||||||
|
int32_t AsyncFileReadCancel(CAsyncObject* object, void (*cleanupCallback)(CAsyncObject* object));
|
||||||
|
|
||||||
void AsyncFileReadDestroyObject(CAsyncObject* object);
|
void AsyncFileReadDestroyObject(CAsyncObject* object);
|
||||||
|
|
||||||
void AsyncFileReadInitialize(uint32_t threadSleep, uint32_t handlerTimeout);
|
void AsyncFileReadInitialize(uint32_t threadSleep, uint32_t handlerTimeout);
|
||||||
|
|||||||
@ -6,6 +6,8 @@
|
|||||||
class SFile;
|
class SFile;
|
||||||
class CAsyncQueue;
|
class CAsyncQueue;
|
||||||
|
|
||||||
|
typedef void (*ASYNC_CALLBACK)(void*);
|
||||||
|
|
||||||
class CAsyncObject {
|
class CAsyncObject {
|
||||||
public:
|
public:
|
||||||
// Member variables
|
// Member variables
|
||||||
@ -13,8 +15,8 @@ class CAsyncObject {
|
|||||||
void* buffer;
|
void* buffer;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
void* userArg;
|
void* userArg;
|
||||||
void (*userPostloadCallback)(void*);
|
ASYNC_CALLBACK userPostloadCallback;
|
||||||
void (*userFailedCallback)(void*);
|
ASYNC_CALLBACK userFailedCallback;
|
||||||
CAsyncQueue* queue;
|
CAsyncQueue* queue;
|
||||||
void* ptr1C;
|
void* ptr1C;
|
||||||
uint8_t priority;
|
uint8_t priority;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user