2012-04-24 6 views
0

스레딩을 배우기 시작하고 문제가 발생했습니다.스레딩 채점 시스템

임시 addedPoints 변수에 포인트를 추가하여 최근에 획득 한 포인트의 수를 플레이어에게 보여 주도록 고안된 점수 시스템이 있습니다. 그런 다음 약 1 초 후에 추가 점수가 선수 점수에 추가되어야합니다.

내 시도는 다음과 같습니다

public static void AddPoints(int points) 
{ 
    for (int i = 0; i < points; i++) 
    { 
     Thread addThread = new Thread(new ThreadStart(ThreadedPoint)); 
    } 
} 

private static void ThreadedPoint() 
{ 
    addedPoints += 1; 
    Thread.Sleep(1000); 
    score += 1; 
    addedPoints -= 1; 
} 

이 두 가지 문제가있다. 우선 이상적인 스레드와는 거리가 먼 스레드 당 1 포인트 만 추가 할 수 있습니다. 두 번째로 실제로 작동하지 않습니다. addedPoints도 점수도 업데이트되지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?

+0

스레드를 사용해야합니까 (또는 학습을 위해하고 싶습니까?)? 그렇지 않으면이 문제는 호출 스레드에서 발생하는 타이머로 더 잘 해결됩니다. 정확한 세부 정보는 사용하는 GUI 시스템에 따라 다릅니다. –

답변

8
당신은 실제로 이제까지 일어날 것 아무것도 귀하의 스레드를 시작하지 않은

:

public static void AddPoints(int points) 
{ 
    Thread addThread = new Thread(new ParameterizedThreadStart(ThreadedPoint)); 
    addThread.Start(points); //You may need a cast of points to Object here 
} 

private static void ThreadedPoint(Object data) 
{ 
    int points = (int)data; 
    addedPoints += points; 
    Thread.Sleep(1000); 
    score += points; 
    addedPoints -= points; 
} 
: 한 번에 한 번이 아니라 한 곳에서 여러 점을 추가하는 측면에서

public static void AddPoints(int points) 
{ 
    for (int i = 0; i < points; i++) 
    { 
     Thread addThread = new Thread(new ThreadStart(ThreadedPoint)); 
     addThread.Start(); 
    } 
} 

당신은 ParameterizedThreadStart 대신 사용할 수 있습니다

+0

고마워, 나는 그것을 시작하는 것을 잊었다는 것을 믿을 수 없다 ... 그것은 지금 작동한다. 다시 고마워. – Runewake2

0

점을 서서히 소비하려면 포인트를 스레드에 전달하고 (How can I pass a parameter to a Java Thread? 참조) while 루프를 사용하여 모든 점을 소비합니다 (전달 된 매개 변수를 점으로 저장한다고 가정).

while(points > 0) { 
    points -=1; 
    addedPoints += 1; 
    Thread.Sleep(1000); 
    score += 1; 
    addedPoints -= 1; 
} 
2

당신이 당신의 저장소가 업데이트가 지연 요구하지 않는 방식으로 "최근에 획득"하는 방법을 재 설계 더 나을 것 스레딩 배우고 싶어하지 않는 한.

e.e. 즉시 점수를 업데이트하고 최신 점수가 언제 얻었는지 알려주는 별도의 파일을 가지고 있기 때문에 항상 점수를 얻을 수 있고 "최근에 얻은"정보를 일부 코드로 파악할 수 있습니다. 필요하다면 "최근에 얻은 점수"로 점수의 표시 값을 조정할 수 있습니다.