2010-11-19 4 views

답변

7

당신이 말하는 "다른 방법"은 운영 체제의 기본 스레딩 기능을 사용하는 것처럼 보입니다 - 선점적입니다. 즉, 가장 편리하다고 생각되는 것을 선택하면 선제 적입니다.

비 선점 (일명 협동) 스레딩을 얻으려면 일반적으로 스레드를 "광섬유"로 변환하여 약간의 추가 작업이 필요합니다.

+0

저를 위해 해 주셔서 감사합니다. 저를 버린 이유는 Windows 링크가 구현되기 전인 1994 년부터 PM 링크가 시도 된 특허임을 알지 못했기 때문에 델파이의 스레딩과는 다른 새로운 것을 이야기하고 있다고 생각했습니다. – lkessler

+0

@lkessler : 그들이 1994 년에 나온 것이라면 아마 거절 당했을 것입니다 (OS/2는 그때까지 외박했습니다). 그들의 우선 날짜는 1982 년이다. 그들은 여전히 ​​유효하지 않을 수도 있지만, 적어도 가능성은 있습니다. –

5

최신 Windows 버전은 모두 preemptive multitasking 운영 체제입니다. 즉, 스레드와 프로세스 (프로세스가 존재해야하는 스레드가 하나 이상 있어야 함)가 모두 예약되고 선제 실행됩니다.

그래서 다음과 같은 답변을했다 "델파이에서이 작업을 수행 할 수있는 방법이있다"

다중 스레드 델파이 응용 프로그램을 작성하는 경우 귀하의 singlethreaded 델파이 응용 프로그램이 이미 선제 다른 응용 프로그램
  • 로 예정되어
    • , 그것은 또한있을 것입니다. 애플리케이션에서 협업 스레딩 모델과 같은 비 선점 모델을 작성하려면 상당한 노력을 기울여야합니다. 한 가지 방법은 coroutines을 사용하는 것입니다. here is an example using Delphi 7.

    가장 좋은 대답은 사용 TThread하거나 주위에 어떤 native Windows thread 또는 래퍼입니다. 선점 형 멀티 스레딩이 있습니다.

    귀하의 링크에있는 모든 모델은 정상적인 Windows 스레드를 사용하며 귀하의 질문이 귀하가 통신 또는 작업 실행을위한 기술 (다른 스레드에서 실행되는 작업)과 다른 스레딩 기술에 대해 혼동하고 있음을의 미합니다. 이 경우 질문을 업데이트하거나 다른 모델에 설명을 요청할 수 있습니다.

  • 2

    당신은 Windows 7에서 소개 된 User-Mode Scheduling을 보았습니까? 기본적으로 섬유는 실제로 작동하지 않습니다. MSDN 사이트에서 이에 대한 많은 정보가 있습니다. 채널 9에 대한 몇 가지 비디오를 회상하는 것 같습니다.

    +0

    재미 있고 잘 알고 있습니다. 불행히도, 거의 모든 사용자가 Windows 7 이상을 사용할 때까지는 고려할 수 없습니다. 앞으로 몇 년이 걸릴 것입니다. – lkessler

    +0

    +1, 매우 흥미 롭습니다. 나는 그것에 대해 듣지 못했다! lkessler, 아마 64 비트 Windows 7에서 실행되지 않는 경우 코드가 표준 스케줄링으로 돌아가는 하이브리드 방식을 사용할 수 있습니다. –