2011-01-14 2 views
0

Wie eine Timers Thread-Funktion erzeugen: timerThreadFunction (pthread_t thread_id) und überprüft, um das Ergebnis des Zeitgebers auf eine sichere Weise von anderer Funktion:Wie ein Timer-Thread in c erstellen

// Begin of atomic part -- cause i'm in multithreaded environement 
    if (timerThreadFunction(thread_id) has not expired) { 
     // SOME WORK HERE 
    } 

    else { 

    // Timer expired 
    // some work here 

    } 

// End of atomic part 

Dank.

+2

Da C keine native Threading-Bibliothek hat, müssen Sie uns mitteilen, auf welcher Plattform Sie sich befinden. Ich schlage auch vor, dass Sie Ihre Frage erneut eingeben, um die Plattform anzugeben. Damit Sie nicht mit Antworten für Plattformen bombardiert werden, die Sie nicht interessieren. – jer

+0

LINUX-Plattform :) – iPadDevloperJr

+1

@jer: Die Erwähnung von 'Pthread_t' in der Frage scheint die Pthreads-Bibliothek implizieren. – caf

Antwort

2

Wenn Sie nach dem gegenseitigen Ausschlussteil fragen, können Sie einen Mutex verwenden, um das zu erreichen. Verwenden Sie pthread_mutex_init to initialize a mutex and pthread_mutex_destroy, um es zu reinigen. Verwenden Sie dann pthread_mutex_lock and pthread_mutex_unlock, um den Mutex zu erhalten und freizugeben.

Bearbeiten Basierend auf einem kurzen (extrem kurzen) Blick auf Ihren anderen Beitrag, den Sie in den Kommentaren erwähnen, verstehe ich, dass Sie nach einer Alternative zu Schlaf() suchen. Eine Möglichkeit besteht darin, select() zu verwenden. Die tun etwas wie folgt:

struct timeval sleeptime; 
// initialize sleeptime with the desired length such as 
memset(&sleeptime, 0, sizeof(sleeptime)); 
sleeptime.tv_sec = 5; 

select(0, NULL, NULL, NULL, &sleeptime); 

Das wird nicht die anderen Threads blockieren. Sie sollten jedoch beachten, dass select zurückkommt (wenn ich mich richtig erinnere), wenn der Prozess irgendwelche Signale empfängt, selbst wenn die Zeit noch nicht abgelaufen ist.

+0

Danke, aber ich möchte ein paar Tipps und einige Beispiel-Code auf, wie das, ich googelte viel und es ist kein Timer-Thread-Beispiel. – iPadDevloperJr

+0

@evariste, Für die Mutex Beispiele, Googles erster Treffer [ist diese Seite] (http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html), die vernünftig erscheint. Können Sie definieren, wonach Sie suchen, wenn Sie "Timer-Thread" sagen? Wenn es eine gemeinsame Bedeutung hat, kenne ich es nicht. –

+0

Danke, ich habe hier einen Code gepostet, aber es kann nicht in Multithreadumgebung verwendet werden: http://StackOverflow.com/questions/4695038/thread-timer-in-c – iPadDevloperJr

0

Es gibt viele Optionen

  1. Sie nicht einen separaten Thread verwenden, abfragen, nur einige interne Timer.
  2. lassen Sie Ihren Timer-Thread abgeschlossen und verbinden Sie Ihren Haupt-Thread mit dem Timer-Thread.
  3. Verwenden Sie ein Semaphor
  4. Verwenden Sie eine Mutex-geschützte Flagge.

Das sollte genug sein, um loszulegen.

+0

Gib mir ein Beispiel :) – iPadDevloperJr