浏览代码

Implemented GCSetMode(). Added GCGetMode().

Brucey 2 年之前
父节点
当前提交
4b1945dba4
共有 3 个文件被更改,包括 26 次插入1 次删除
  1. 12 1
      blitz.mod/blitz.bmx
  2. 13 0
      blitz.mod/blitz_gc.c
  3. 1 0
      blitz.mod/blitz_gc.h

+ 12 - 1
blitz.mod/blitz.bmx

@@ -452,7 +452,7 @@ End Rem
 Function MemMove( dst:Byte Ptr,src:Byte Ptr,size:Size_T )="void bbMemMove( void *,const void *,size_t )"
 
 Rem
-bbdoc: Set garbage collector mode
+bbdoc: Sets the garbage collector mode
 about:
 @mode can be one of the following:<br/>
 1 : automatic GC - memory will be automatically garbage collected<br/>
@@ -462,6 +462,17 @@ The default GC mode is automatic GC.
 End Rem
 Function GCSetMode( Mode:Int )="bbGCSetMode"
 
+Rem
+bbdoc: Gets the garbage collector mode
+about:
+@mode can be one of the following:<br/>
+1 : automatic GC - memory will be automatically garbage collected<br/>
+2 : manual GC - no memory will be collected until a call to GCCollect is made<br/>
+<br/>
+The default GC mode is automatic GC.
+End Rem
+Function GCGetMode:Int()="bbGCGetMode"
+
 Rem
 bbdoc: Suspend garbage collector
 about:

+ 13 - 0
blitz.mod/blitz_gc.c

@@ -151,6 +151,19 @@ int bbGCCollectALittle() {
 }
 
 void bbGCSetMode( int mode ){
+	if (mode == 1) {
+		GC_set_disable_automatic_collection(0);
+	} else if (mode == 2) {
+		GC_set_disable_automatic_collection(1);
+	}
+}
+
+int bbGCGetMode(){
+	if (GC_get_disable_automatic_collection()) {
+		return 2;
+	} else {
+		return 1;
+	}
 }
 
 void bbGCSetDebug( int debug ){

+ 1 - 0
blitz.mod/blitz_gc.h

@@ -54,6 +54,7 @@ struct BBGCMem{
 
 void		bbGCStartup();
 void		bbGCSetMode( int mode );
+int			bbGCGetMode();
 void		bbGCSetDebug( int debug );
 void*	bbGCMalloc( int size,int flags );
 BBObject*	bbGCAllocObject( unsigned int size,BBClass *clas,int flags );