source: Sophya/trunk/SophyaLib/SysTools/zthread.cc@ 1612

Last change on this file since 1612 was 1612, checked in by ansari, 24 years ago

Ajout classes ZThread (interface avec les threads POSIX - Reza 31/7/2001

File size: 1.9 KB
Line 
1// Interface C++ aux Thread POSIX - R. Ansari 02/2001
2// LAL (Orsay) / IN2P3-CNRS DAPNIA/SPP (Saclay) / CEA
3
4#include "zthread.h"
5#include <stdlib.h>
6#include <stdio.h>
7
8#define CheckSt(st_, strg_) if (st_ != 0) perror(strg_);
9
10/*
11extern "C" {
12 void * zthr_run( void * xthr);
13}
14*/
15
16static void * zthr_run(void * xthr)
17{
18 ZThread * thr = (ZThread *)xthr;
19 thr->run();
20 pthread_exit(NULL);
21 return NULL;
22}
23
24
25/* ------ Classe ZThread ------- */
26
27ZThread::ZThread(size_t stacksize)
28{
29 _initok = false;
30 _ssize = 0;
31 _act = NULL;
32 _usp = NULL;
33 _rc = -99;
34}
35
36ZThread::~ZThread()
37{
38 // Que faut-il faire ?
39}
40
41void ZThread::start()
42{
43 if (_initok) throw ZThreadExc("ZThread::Start() - Already started thread !");
44 int rc;
45 pthread_attr_t tha;
46 rc = pthread_attr_init(&tha);
47 CheckSt(rc,"ZThread::start() - Pb creating tha attribute object");
48 if (_ssize > 0)
49 rc = pthread_attr_setstacksize(&tha, _ssize);
50 rc = pthread_create(&_thr, &tha, zthr_run, this);
51 CheckSt(rc,"ZThread::start() - Pb creating the thread object");
52 _initok = true;
53 setRC(rc);
54}
55
56
57void ZThread::cancel()
58{
59 if (!_initok) throw ZThreadExc("ZThread::cancel() - thread not started !");
60 int rc = pthread_cancel(_thr);
61 CheckSt(rc,"ZThread::cancel() - Pb pthread_cancel() ");
62 setRC(-77);
63}
64
65
66void ZThread::join()
67{
68 if (!_initok) throw ZThreadExc("ZThread::join() - thread not started !");
69 void * x;
70 int rc = pthread_join(_thr, &x);
71 CheckSt(rc,"ZThread::Join() - Pb pthread_join() ");
72 return;
73}
74
75void ZThread::run()
76{
77 if (_act) _act(_usp);
78 setRC(0);
79 return;
80}
81
82
83/* ------ Classe ZMutex ------- */
84
85ZMutex::ZMutex()
86{
87 _mutx = new pthread_mutex_t;
88 _condv = new pthread_cond_t;
89 int rc;
90 rc = pthread_mutex_init(_mutx, NULL);
91 CheckSt(rc,"ZMutex::ZMutex() Pb pthread_mutex_init");
92 rc = pthread_cond_init(_condv, NULL);
93 CheckSt(rc,"ZMutex::ZMutex() Pb pthread_cond_init");
94}
95
96ZMutex::~ZMutex()
97{
98 delete _mutx;
99 delete _condv;
100}
101
Note: See TracBrowser for help on using the repository browser.