/[cvs]/api/Classes/Semaphore/Semaphore.cpp
ViewVC logotype

Annotation of /api/Classes/Semaphore/Semaphore.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide annotations) (vendor branch)
Sun Jul 1 20:47:58 2001 UTC (22 years, 11 months ago) by bearsoft
Branch: lazy, MAIN
CVS Tags: start, HEAD
Changes since 1.1: +0 -0 lines
First import

1 bearsoft 1.1 #include "Semaphore.h"
2    
3     #ifdef linux
4    
5     Semaphore::Semaphore()
6     {
7     needs_attach = 1;
8     }
9    
10     Semaphore::Semaphore(char* path, char id, unsigned int permissions)
11     {
12     arg.val = 1;
13     needs_attach = 1;
14     key_t key;
15     key = ftok(path,id); //skapar nyckel
16     semid = semget(key , 1 , IPC_CREAT | IPC_EXCL | permissions);
17     semctl(semid , 0 , SETVAL , arg);
18    
19     if(semid == -1)
20     {
21     cout << "Kunde inte skapa semafor" << endl << "Kan bero på att semaforen redan finns" << endl;
22     }
23     else
24     {
25     cout << "Du har skapat en semafor." << endl;
26     needs_attach = 0;
27     }
28    
29     }
30    
31     Semaphore::~Semaphore()
32     {
33     if(semctl(semid , 0 , IPC_RMID , arg) == -1)
34     {
35     cout << "Lyckades inte ta död på semaforen" << endl;
36     }
37     else
38     {
39     cout << "Semaforen är död" << endl;
40     }
41     }
42    
43     void Semaphore::attach(char* path, char id, unsigned int permissions)
44     {
45     if(needs_attach)
46     {
47     key_t key;
48     key = ftok(path ,id); //skapar nyckel
49     semid = semget(key , 1 , permissions); //IPC_CREAT | IPC_EXCL |
50    
51     if(semid == -1)
52     {
53     cout<<"Du har inte blivit kopplad till en semafor"<< endl <<" "<<endl;
54     }
55     else
56     {
57     cout<<"Du har nu kopplat dig till en semafor."<<endl;
58     needs_attach = 0;
59     }
60     }
61     }
62    
63     void Semaphore::signal() //Måste ligga utanför objektet
64     {
65     static sembuf sb;
66    
67     sb.sem_num = 0;
68     sb.sem_flg = 0; //Kan vara: SEM_UNDO eller IPC_NOWAIT , mm
69     sb.sem_op = 1;
70    
71     if(semop(semid , &sb , 1) == -1)
72     {
73     // perror("Signalfel hos semaforen i signal-funktionen");
74     cout << "Signalfel hos semaforen i signal-funktionen" << endl;
75     exit(1);
76     }
77     }
78    
79     void Semaphore::wait()
80     {
81     static sembuf sb;
82    
83     sb.sem_num = 0;
84    
85     sb.sem_flg = 0; //kan vara SEM_UNDO eller IPC_NOWAIT
86    
87     sb.sem_op = -1;
88    
89    
90     if(semop(semid , &sb , 1) == -1)
91     {
92     // perror("Signalfel hos semaforen i wait-funktionen");
93     cout << "Signalfel hos semaforen i wait-funktionen" << endl;
94     exit(1);
95     }
96     }
97    
98     int Semaphore::semset(int i)
99     {
100     arg.val = i;
101     return semctl(semid , 0 , SETVAL , arg);
102     }
103    
104     #endif
105    
106    
107    
108    
109    
110    
111    
112    
113    
114    
115    
116    
117    
118    
119    
120    
121    

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26