summaryrefslogtreecommitdiff
path: root/UGlibThreads.pas
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@tbzatek.englab.brq.redhat.com>2008-07-09 16:32:03 +0200
committerTomas Bzatek <tbzatek@tbzatek.englab.brq.redhat.com>2008-07-09 16:32:03 +0200
commit16550e8c907165d1305fc4b58f2b05554ea671a0 (patch)
tree2a4378e78f5b0a6d318282e11b8e1e58e9a39c15 /UGlibThreads.pas
parent4c0435478c2325b107740c812ca54476bebeccee (diff)
downloadtuxcmd-16550e8c907165d1305fc4b58f2b05554ea671a0.tar.xz
Revert "Finished glib threads implementation"
This reverts commit 4c0435478c2325b107740c812ca54476bebeccee.
Diffstat (limited to 'UGlibThreads.pas')
-rw-r--r--UGlibThreads.pas97
1 files changed, 15 insertions, 82 deletions
diff --git a/UGlibThreads.pas b/UGlibThreads.pas
index 9c53691..3d24afd 100644
--- a/UGlibThreads.pas
+++ b/UGlibThreads.pas
@@ -1,6 +1,6 @@
(*
Tux Commander - UGlibThreads - Threading support through the GLIB library
- Copyright (C) 2007-2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Copyright (C) 2007 Tomas Bzatek <tbzatek@users.sourceforge.net>
Check for updates on tuxcmd.sourceforge.net
This program is free software; you can redistribute it and/or modify
@@ -23,6 +23,10 @@ interface
uses glib2;
+// function xg_thread_supported(): gboolean; cdecl; external 'libgthread-2.0.so' name 'g_thread_supported';
+// function xg_thread_create(func: TGThreadFunc; data: gpointer; joinable: gboolean; error: PPGError): PGThread; external 'libgthread-2.0.so' name 'g_thread_create';
+
+
type
TGlibThreadMethod = procedure of object;
@@ -32,8 +36,7 @@ type
FCreateSuspended: Boolean;
FTerminated: Boolean;
FSuspended: Boolean;
- FReturnValue: Integer;
- FFreeOnTerminate: Boolean;
+// FFreeOnTerminate: Boolean;
// FFinished: Boolean;
// procedure SetSuspended(Value: Boolean);
protected
@@ -46,61 +49,38 @@ type
// procedure AfterConstruction; override;
procedure Resume;
{ procedure Suspend;
- procedure Terminate; }
+ procedure Terminate;
function WaitFor: LongWord;
property FreeOnTerminate: Boolean read FFreeOnTerminate write FFreeOnTerminate;
-{ property Suspended: Boolean read FSuspended write SetSuspended; }
- property ReturnValue: Integer read FReturnValue write FReturnValue;
+ property Suspended: Boolean read FSuspended write SetSuspended; }
end;
- TGlibCriticalSection = class
- private
- FGMutex: TGStaticMutex;
- public
- constructor Create;
- destructor Destroy;override;
- procedure Enter;
- procedure Leave;
- procedure Acquire;
- procedure Release;
- end;
-
-
implementation
uses Classes, SysUtils, UCoreUtils;
function xg_thread_func(data: gpointer): gpointer; cdecl;
-var Thread: TGlibThread;
- FreeThread: Boolean;
begin
DebugMsg(['(II) TGlibThread.g_thread_func']);
- Result := nil;
try
- Thread := TGlibThread(data);
- if Assigned(Thread) and (Thread is TGlibThread) then begin
- Thread.Execute;
- Result := gpointer(Thread.FReturnValue);
- FreeThread := Thread.FreeOnTerminate;
- if FreeThread then Thread.Free;
- end else DebugMsg(['(EE) TGlibThread.g_thread_func: wrong data argument']);
+{ if Assigned(data) and (TObject(data) is TGlibThread)
+ then TGlibThread(data).Execute
+ else DebugMsg(['(EE) TGlibThread.g_thread_func: wrong data argument']); }
except
on E: Exception do
DebugMsg(['(EE) TGlibThread.g_thread_func: Exception ', E.ClassName, ': ', E.Message]);
end;
+ Result := data;
end;
constructor TGlibThread.Create(CreateSuspended: Boolean);
begin
- inherited Create;
DebugMsg(['(II) TGlibThread.Create']);
+ inherited Create;
FSuspended := CreateSuspended;
FCreateSuspended := CreateSuspended;
FHandle := nil;
- FReturnValue := 0;
- FFreeOnTerminate := False;
- if not CreateSuspended then Resume;
end;
destructor TGlibThread.Destroy;
@@ -121,58 +101,11 @@ var err: PGError;
begin
DebugMsg(['(II) TGlibThread.Resume']);
err := nil;
- FHandle := g_thread_create(@xg_thread_func, Self, True, @err);
- if FHandle = nil then begin
- DebugMsg(['(EE) TGlibThread.Resume: Error creating new thread: ', err.message]);
- g_error_free(err);
- end;
-end;
-
-function TGlibThread.WaitFor: LongWord;
-begin
- if FHandle <> nil then g_thread_join(FHandle);
- Result := FReturnValue;
-end;
-
-
-(**********************************************************************************************************************)
-constructor TGlibCriticalSection.Create;
-begin
- inherited Create;
- FGMutex := nG_STATIC_MUTEX_INIT;
-end;
-
-destructor TGlibCriticalSection.Destroy;
-begin
- inherited Destroy;
-end;
-
-procedure TGlibCriticalSection.Enter;
-begin
- Acquire;
-end;
-
-procedure TGlibCriticalSection.Leave;
-begin
- Release;
-end;
-
-procedure TGlibCriticalSection.Acquire;
-begin
- g_static_mutex_lock(@FGMutex);
+ FHandle := g_thread_create_full(@xg_thread_func, Self, 0, False, False, G_THREAD_PRIORITY_NORMAL, @err);
+ if FHandle = nil then DebugMsg(['(EE) TGlibThread.Resume: Error creating new thread: ', err.message]);
end;
-procedure TGlibCriticalSection.Release;
-begin
- g_static_mutex_unlock(@FGMutex);
-end;
-
-(**********************************************************************************************************************)
-
-initialization
- if not g_thread_supported then g_thread_init(nil);
-finalization
end.