ChangeLog
2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2006-08-17 Georg Steffers [GST] <georg@steffers.org>
* src/stream_pool.c src/posix/stream_pool.c src/win32/stream_pool.c
include/stream_pool.h include/posix/stream_pool.h
include/win32/stream_pool.h src/Makefile.am include/Makefile.am
and various others (this is a major change):
Sorry, this is in german and much to declarative...this was a
thoughts-list that is now realized completely. I will rewrite it when
i find the time.
OK, ich fang mal wieder damit an meine Gedanken aufzunehmen.
Das Problem das ich jetzt bekomme ist, das es streams unter
windows nicht gibt...bzw. verschieden arten von streams unterschiedlich
gehandhabt werden müssen. Hinzu kommt, das WaitForMultipleObject
nur max. 64 Objekte werwalten kann. Will man mehr verwalten muß man
das in mehreren streads tun.
Daher muß ein stream_pool, anders als andere event listener nicht
nur aus einem thread bestehen sondern aus einem pro 64 gleicher
streams und einem Kontoll-Thread. (Hmm, für viele andere event listener
gilt das gleiche, wenn ich unter Windows mehr als 64 Objekte
überwachen will. z.B. der fs_watcher. Gerade beim fs_watcher ist
es aber nun so, daß der unter Windows eh komplett anders
geschrieben werden muß.)
Startet man einen stream_pool_listener, so wird der Kontroll Thread
gestartet, welcher seinerseits alle weiteren threads startet.
Added man einen stream, so muß zunächst nachgesehen werden ob es
bereits einen <<stream pool>> für diesen stream_type gibt der außerdem
noch nicht 64 streams enthält, falls es so einen stream pool gibt
kann man den stream zu diesem hinzufügen, anderenfalls muß ein
neuer stream pool angelegt werden.
Nachdem der stream geadded wurde muß nur der stream pool, zu dem
der stream hinzugefügt wurde neu gestartet werden.
Will man einen stream aus einem stream pool entfernen, so muß dieser
zunächst in allen stream pools gesucht werden, dann muß der thread
zu dem stream pool in dem sich der stream befindet gestoppt werden
woraufhin der stream entfernt werden kann. Danach muß der stream pool
thread wieder gestartet werden.
Für UNIX brauche ich nur einen einzige thread methode für alle stream
pool typen, nämlich die, welche select nutzt.
Für Windows muß ich je nach dem welcher Art von streams ein stream pool
enthält unterschiedliche thread methoden nutzen:
- select für sockets
- WaitForMultipleObject für andere (Wie stell ich dabei fest was genau
mit dem Objekt passiert ist? OK, für pipes ist das Einfach, da es
eh ein Wege Kommunikation ist.)
- und möglicherweise noch andere.