diff options
author | Xavier Roche <xroche@users.noreply.github.com> | 2012-03-19 12:36:11 +0000 |
---|---|---|
committer | Xavier Roche <xroche@users.noreply.github.com> | 2012-03-19 12:36:11 +0000 |
commit | ad5b7acc19290ff91e0f42a0de448a26760fcf99 (patch) | |
tree | 2d1867758835fd0c4e443ff3cc7e5c774af85874 /src/htsthread.c |
Imported httrack 3.20.2
Diffstat (limited to 'src/htsthread.c')
-rw-r--r-- | src/htsthread.c | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/src/htsthread.c b/src/htsthread.c new file mode 100644 index 0000000..0a3bee6 --- /dev/null +++ b/src/htsthread.c @@ -0,0 +1,97 @@ +/* ------------------------------------------------------------ */ +/* +HTTrack Website Copier, Offline Browser for Windows and Unix +Copyright (C) Xavier Roche and other contributors + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +Important notes: + +- We hereby ask people using this source NOT to use it in purpose of grabbing +emails addresses, or collecting any other private information on persons. +This would disgrace our work, and spoil the many hours we spent on it. + + +Please visit our Website: http://www.httrack.com +*/ + + +/* ------------------------------------------------------------ */ +/* File: Threads */ +/* Author: Xavier Roche */ +/* ------------------------------------------------------------ */ + + +#include "htsglobal.h" +#include "htsthread.h" + +// Threads - emulate _beginthread under Linux/Unix using pthread_XX +// Some changes will have to be done, see PTHREAD_RETURN,PTHREAD_TYPE +#if USE_PTHREAD +#include <pthread.h> /* _beginthread, _endthread */ + +unsigned long _beginthread( void* ( *start_address )( void * ), unsigned stack_size, void *arglist ) +{ + pthread_t th; + int retcode; + /* create a thread */ + retcode = pthread_create(&th, NULL, start_address, arglist); + if (retcode != 0) /* error */ + return -1; + /* detach the thread from the main process so that is can be independent */ + pthread_detach(th); + return 0; +} +#endif + +#if USE_BEGINTHREAD +/* + Simple lock function + + Return value: always 0 + Parameter: + 1 wait for lock (mutex) available and lock it + 0 unlock the mutex + [-1 check if locked (always return 0 with mutex)] + -999 initialize +*/ +int htsSetLock(PTHREAD_LOCK_TYPE* hMutex,int lock) { +#if HTS_WIN + /* lock */ + if (lock==1) + WaitForSingleObject(*hMutex,INFINITE); + /* unlock */ + else if (lock==0) + ReleaseMutex(*hMutex); + /* create */ + else if (lock==-999) + *hMutex=CreateMutex(NULL,FALSE,NULL); +#else + /* lock */ + if (lock==1) + pthread_mutex_lock(hMutex); + /* unlock */ + else if (lock==0) + pthread_mutex_unlock(hMutex); + /* create */ + else if (lock==-999) + pthread_mutex_init(hMutex,0); +#endif + return 0; +} + +#endif + |