weiterlaufende Funktionen
-
Moin,
gibt es in c die Möglichkeit eine Funktion so zu definieren, dass sie
immer weiterläuft, also z.B.
aus main() heraus wird under_main() aufgerufen, under_main()
arbeitet, gibt einen Wert zurück (speichert z.b. auch was in einer
globalen Variablen), main() arbeitet dann mit dem von under_main()
zurückgegebenen Wert weiter, aber such under_main(9 läuft weiter und
speichert irgendwelche Werte in (globalen) Variablen.
Gibt es das?
Wenn ja, kann mir jemand erklären, wie man damit umgeht?Noch ne Sache, kennt jemand ein gutes Tutorial zum Umgang mit Verzeichnissen?
Danke schonmal!
-
entweder mit einem task-switcher, der alle paar ms den prozessor umschaltet, oder mit sogenannten 'coroutines'
--> http://www.sics.se/~adam/pt/
-
Man könnte auch mit Threads arbeiten. Zwar solltest du da nicht
Daten in globale Variblen schreiben, aber das kann man mit entsprechende
Datenstrukturen ohne Probleme hinbekommen.Vielleicht suchst du mal nach Posix threads (pthread).
Gruß mcr
-
pthreads sin aber leider halt net im c-standard...
z.b. bei m$-betriebssystemen sind se nicht implementiert
im posix-standard sin se ja... würde mich freuen, wenn der redmonder spaßverein sich auch mal um die implementierung auf windows kümmern würde, schert se aber nen alten dreck und wir dürfen mit acht-zeiligen funktionsaufrufen in der grausigen win-api leben ^^
sofern windows das mittel der wahl ist, ansonsten unter linux/unix sin pthreads natürlich sehr schön
-
Vorden schrieb:
pthreads sin aber leider halt net im c-standard...
z.b. bei m$-betriebssystemen sind se nicht implementiert
im posix-standard sin se ja... würde mich freuen, wenn der redmonder spaßverein sich auch mal um die implementierung auf windows kümmern würde, schert se aber nen alten dreck und wir dürfen mit acht-zeiligen funktionsaufrufen in der grausigen win-api leben ^^Ach, die WinAPI-Threads sind doch recht brauchbar - wie du da auf achtzeilige Funktionsaufrufe kommst, mußt du mir mal erklären (_beginthread() benötigt 3 Parameter, AfxBeginThread() 2..6).
(ich geb's zu - ich kenne pthreads nicht gut genug, um einen Vergleich anzutreten, aber auf achtzeilige Aufrufe bin ich noch nie gekommen)
-
CStoll schrieb:
Vorden schrieb:
pthreads sin aber leider halt net im c-standard...
z.b. bei m$-betriebssystemen sind se nicht implementiert
im posix-standard sin se ja... würde mich freuen, wenn der redmonder spaßverein sich auch mal um die implementierung auf windows kümmern würde, schert se aber nen alten dreck und wir dürfen mit acht-zeiligen funktionsaufrufen in der grausigen win-api leben ^^Ach, die WinAPI-Threads sind doch recht brauchbar - wie du da auf achtzeilige Funktionsaufrufe kommst, mußt du mir mal erklären (_beginthread() benötigt 3 Parameter, AfxBeginThread() 2..6).
(ich geb's zu - ich kenne pthreads nicht gut genug, um einen Vergleich anzutreten, aber auf achtzeilige Aufrufe bin ich noch nie gekommen)hmm, naja, pthread_create() braucht 4 parameter:
nen zeiger vom typ pthread_t, pthread_attr_t für diverse attribute, wie stack-size etc (kann man auf NULL lassen, weil man eher net viel anpassungen braucht, bis auf stack-size u.u. wenn man viele threads hat, die nicht viel speicher brauchen, kann man die stack-size runter setzen), einen funktionspointer und argumente im format void *. allerdings muss man bei pthreads sagen, dass die sehr gut strukturiert sind und alle dinge (wie mutex, etc) auch eigentlich immer ähnliche api-funktionen bieten, eigentlich immer gleicher ablauf: *_init, *_enter (lock, unlock, benutzen halt), *_destroy
muss sagen, dass des die programmierung damit sehr angenehm macht.
bei der winapi finde ich es manchmal weng nervig, z.b. bei fensterle programmieren, dass du z.b. hwnd oder so immer mit rum reichst, da gibts schönere apis, habe im allgemeinen die winapi gemeint so.
is _beginthread net deprecated ? dachte alle funktionen mit _ am anfang wären das, kann mich aber auch täuschen.
-
Vorden schrieb:
is _beginthread net deprecated ? dachte alle funktionen mit _ am anfang wären das, kann mich aber auch täuschen.
Bin ich jetzt nicht sicher, aber ich arbeite auch weniger mit reinem WinAPI. Und die MFC Klassen zum Multithreading sind auch alle ähnlich aufgebaut - Ctor, Dtor, Lock(), Unlock(), Umwandlung in Handle (für Wartefunktionen).
Achja, von den 6 Parametern für AxfBeginThread (Funktionszeiger, void* Parameter, Priorität, Stackgröße, Hilfsflags, Sicherheitsattribute) sind nur die ersten zwei erforderlich, der Rest hat (in 99% brauchbare) Defaultwerte.
-
Vorden schrieb:
z.b. bei m$-betriebssystemen sind se nicht implementiert
im posix-standard sin se ja... würde mich freuen, wenn der redmonder spaßverein sich auch mal um die implementierung auf windows kümmern würde, schert se aber nen alten dreck und wir dürfen mit acht-zeiligen funktionsaufrufen in der grausigen win-api leben ^^gibts auch für windoows: http://sourceware.org/pthreads-win32/
ist z.b. gut, wenn man posix-software nach win portieren will, ansonsten sind die winapi-threads natürlich besser.
-
dass es da ne nachimplementierung für win gibt, wusste ich, da kannst theoretisch genauso gut unter cygwin arbeiten und deine programme mit gcc unter cygwin compilieren, dann kannste auch unter windows die pthreads benutzen (auch windows-exe)... frage is bloß, was leichter is, ich denke die pthread lib für win, anstatt cygwin zu installieren, is ganz schön nervig, bis man alles da geladen hat(hab mir mal die kompletten pakete installiert, des dauert ganz schön :D)
-
Vorden schrieb:
dass es da ne nachimplementierung für win gibt, wusste ich, da kannst theoretisch genauso gut unter cygwin arbeiten und deine programme mit gcc unter cygwin compilieren, dann kannste auch unter windows die pthreads benutzen (auch windows-exe)... frage is bloß, was leichter is, ich denke die pthread lib für win, anstatt cygwin zu installieren, is ganz schön nervig, bis man alles da geladen hat(hab mir mal die kompletten pakete installiert, des dauert ganz schön
ja, das ist doof. also nimmt man unter win doch besser die winapi-threads und dann ist alles schön (nur nicht mehr posix-portabel). gibt es eigentlich eine winapi-emulation für unix und unix-clones? sowas wie cygwin? ach ja, 'wine' oder wie das heisst...