Jag vill ha ett program med två trådar som skall snurra så fort det går och samtidigt låta användaren hålla på med programmet. Varför har du med detta? Men om jag tar bort det får jag ett felmeddelande som säger: Nu så väntar jag på att trådarna skall bli klara genom att skriva det där (och den andra) ser skum ut. Hej! Nope, det blev ingen skillnad. Tror du det kan vara det där med Application.Run? Du kan med gott mod ta bort While(true) i din runGame metod. Ja, det funkade viss att bara ta bort det. Jag vet inte varför jag fick ett felmeddelande innan. Tack för hjälpen!Trådbekymmer
Nu har jag det såhär:
<code>
public GameEngine()
{
// Creates the thread for the drawing
drawingThread = new Thread(new ThreadStart(drawLoop));
// Creates the thread for the informationCollector
collectorThread = new Thread(new ThreadStart(watch));
}
public void runGame()
{
// Start the drawing thread
drawingThread.Start();
//Start the collector thread
collectorThread.Start();
// Wait for the drawing thread to be initialized
while (!drawingThread.IsAlive);
// Wait for the drawing thread to be initialized
while (!collectorThread.IsAlive);
while (true)
{
// Put the Main thread to sleep
Thread.Sleep(10);
}
}
public void drawLoop()
{
while (true)
{
draw();
Thread.Sleep(10);
}
}
public void watch()
{
while (true)
{
//Gör något annat
Thread.Sleep(10);
}
}
</code>
Men det här låser hela programmet. Hur skall man göra med trådar egentligen?Sv: Trådbekymmer
while (true)
{
// Put the Main thread to sleep
Thread.Sleep(10);
}
Det stoppar ju huvudtråden... Ta bort det så borde det fungera.
/Johan
Sv:Trådbekymmer
An unhandled exception of type 'System.Threading.ThreadStateException' occurred in system.windows.forms.dll
Additional information: Thread is running or terminated; it can not restart.
Jag trodde att Thread.Sleep var typ spm DoEvents i VB men det kanske inte stämmer? Jag vill ju att trådarna skall fortsätta gå även efter metoden är avslutad.Sv: Trådbekymmer
<code>
drawingThread.Join();
collectorThread.Join();
</code>
efter det andra. Men de tar fortfarande all datorkraft så att det inte går att göra något. Hur skall man fixa det? Kan man styra hur stor andel av kraften en viss tråd skall få?
När jag gör som jag gör nu så nås aldrig Application.Run är det därför det blir konstigt? Jag kan inte lägga detta efter Application.Run för då händer aldrig detta istället. Hur göra?Sv: Trådbekymmer
while (!drawingThread.IsAlive);
..är du säker på att dina trådar kommer åt att starta? testa med en kort Sleep eller nåt sånt istället..
Sv:Trådbekymmer
Sv: Trådbekymmer
Din huvutråd kommer inte att dö, det ser Application.Run till.
Application.Run startar en s k Message Loop och när din huvudtråd inte har något att göra då vilar den i den message loopen.
dina två andra trådar borde däremot starta och gå in i en infinit loop.
Du måste köra Application.Run för att få en sådan Message loop och få upp ett formulär. Det bör du göra efter du startat dina trådar i det här fallet.Sv:Trådbekymmer