|
|
Lordchen
Champion
Reged: 21:38
Beitrag: 4575
Ort: Baden, Karlsruhe
|
ja wirklich: 100.000 Threads wurden gestartet. der praktische Wert ist Sicherheit im Umgang damit, sonst keinen Wert und
Ziel eindeutig: Das System zum Absturz bringen ...
Daraus wurde aber nix 
Wie das? Eine reine Zeitfrage und das Multitasking von Windows. Es liefen tatsächlich nie mehr als 300-600 Threads. Wurde z.B. Thread 2000 gestartet, waren die ersten paar Thread schon am Ende.
Gucken wir mal die Main - Routine von diesem Ding an 
Code:
#include "m_Thread.h"
int main(int argc, char** argv){ m_Thread t;
for(int i=0; i<100000;++i) t.Run(); MessageBoxA(NULL, "OK", "OK", 64); return 0; }
*räusperchen* Lordchen hat die Threads doch nicht etwa ... Doch! Genau: In eine Klasse gepackt! Deren Methode ist Run().
Die m_Thread.h
Code:
#ifndef m_Thread #define m_Thread #ifndef WS_VISIBLE #include <windows.h> #include <iostream> #endif
class m_Thread{
private: static void mythread(int i){ long n=0; while(true){ InterlockedIncrement(&n); if(n > 5000){ std::cout << "und tschüss " << i << std::endl; break; } } }; public: void Run(); }; #endif
Interlocked ... also den ThreadStack geärgert 
Die m_Thread.cpp
Code:
#include "m_Thread.h"
void m_Thread::Run(){ DWORD nID; HANDLE iThread = NULL; static int i = 0; ++i; iThread=CreateThread(NULL,0, (LPTHREAD_START_ROUTINE) mythread,(void*)i,0,&nID); };
Also, easy Handling mit Threads in Klassen 
Das Ding pushed den Stack ganz schön auf, wie das Bild zeigt:
--------------------
Lordchen
(Der Mann der schneller proggt als sein Schatten)
Bearbeitet von Lordchen (14:55 22/08/2006)
|
|
|
DrGonzo
Junior Master
Reged: 18:28
Beitrag: 142
|
Nur eine kleine Spielerei nehme ich an?
|
|
|
Lordchen
Champion
Reged: 21:38
Beitrag: 4575
Ort: Baden, Karlsruhe
|
Hi,
jain 
Zitat: "ja wirklich: 100.000 Threads wurden gestartet. der praktische Wert ist Sicherheit im Umgang damit, sonst keinen Wert und
Ziel eindeutig: Das System zum Absturz bringen ...
Daraus wurde aber nix"
Sonst: Abwarten grundlos passiert hier nichts.
--------------------
Lordchen
(Der Mann der schneller proggt als sein Schatten)
|
|
|
DrGonzo
Junior Master
Reged: 18:28
Beitrag: 142
|
Hallo! Ich frage mich momentan, wozu ich Threads in einer Anwendung einbauen sollte, welche Vorteile sie mir verschaffen etc...? Kannst du mir das bitte erklären??
|
|
|
Helmut
Champion
Reged: 11:35
Beitrag: 1576
Ort: Frankenmarkt
|
Hallo Leute
Hmm. Ich hätte die selbe Frage, wie DrGonzo.
-------------------- mfg Helmut
[C- und VHDL-User]
|
|
|
Lordchen
Champion
Reged: 21:38
Beitrag: 4575
Ort: Baden, Karlsruhe
|
Hi allz,
die Antwort ist eigentlich einfach: Threads bringen nichts wenn Du nur 1 Prozessor hast und aber doch was, wenn tatsächlich zwei oder mehrere Aufgaben gleichzeitig erledigt werden können.
1. Fall: Der ThreadServer
Der überwacht einen Port und regelt den Verkehr mit dem Clienten.
2. Fall: Der MailslotClient
Der überwacht Mailslots auf ankommende Mails
3. Fall: Der named Pipe Client
der überwacht namend Pipes
u.s.w. u.s.w
dann gibt es noch viele Möglichkeiten sinnvoll Threads zu launchen ...
für alle diese Typen stellt die Kernel Waitroutines zur Verfügung die nur von Threads benützt werden können die nicht zufällig der Initialthread ist. Wenn man immer nur Singlethreading gewohnt ist - kennt man diese Welt eigentlich nicht so richtig
--------------------
Lordchen
(Der Mann der schneller proggt als sein Schatten)
|
|
|
DrGonzo
Junior Master
Reged: 18:28
Beitrag: 142
|
Hi, das verstehe ich nicht ganz:
für alle diese Typen stellt die Kernel Waitroutines zur Verfügung die nur von Threads benützt werden können die nicht zufällig der Initialthread ist.
|
|
|
Lordchen
Champion
Reged: 21:38
Beitrag: 4575
Ort: Baden, Karlsruhe
|
Hi DrGonzo
der Initialthread ist der Thread, mit dem Dein Programm gestartet wurde  Den wirst du ja nicht bremsen wollen - oder?
Wenn ja,
gib einfach irgendwo:
Sleep &Hffffffff
ein und Du verstehst den Satz sofort
--------------------
Lordchen
(Der Mann der schneller proggt als sein Schatten)
|