Prioridade de execução de threads!!
Olá pessoal!!!
Preciso executar 10 threads simultaneamente e preciso estipular a prioridade de execução delas. Por exemplo, pego um numero aleatorio entre 0 e 100´, se ele for par a thread executa antes que aquelas que encontraram um numero impar. Preciso definir essa prioridade quando a thread já estiver executando, tipo começa a execução e atrinbui uma prioridade para si mesma, dai se existir uma outra thread com prioridade maior esperando pelo procesador ela que irá executar.
Vcs saberiam me dizer s isto é possível?? E como fazer isto???
Caso não tenha sido claro, me falem, ok?
Agradeço de antemão a todos
Abraços
Samuel Gubert
Preciso executar 10 threads simultaneamente e preciso estipular a prioridade de execução delas. Por exemplo, pego um numero aleatorio entre 0 e 100´, se ele for par a thread executa antes que aquelas que encontraram um numero impar. Preciso definir essa prioridade quando a thread já estiver executando, tipo começa a execução e atrinbui uma prioridade para si mesma, dai se existir uma outra thread com prioridade maior esperando pelo procesador ela que irá executar.
Vcs saberiam me dizer s isto é possível?? E como fazer isto???
Caso não tenha sido claro, me falem, ok?
Agradeço de antemão a todos
Abraços
Samuel Gubert
Sgubert
Curtidas 0
Respostas
Sgubert
13/05/2004
SOBE
GOSTEI 0
Sgubert
13/05/2004
Ninguém teria ideia se isso é possível ou não????
Preciso muito de uma ajuda :(
Preciso muito de uma ajuda :(
GOSTEI 0
Sgubert
13/05/2004
SOBE
GOSTEI 0
Nildo
13/05/2004
Você pode usar a própria propriedade TAG da Thread para determinar seu número: 1..100 para poder verificar se a mesma é Par ou Impar (Vai ser par quando: ´TAG mod 2 = 0´)
Quando ela já estiver executando ou ainda não foi executada, é só você atribuir a propriedade dela chamada PRIORITY. Ela aceita valores do tipo TThreadPriotity. Olhe o que o Help do delphi tem a dizer:
Espero ter te ajudado
Quando ela já estiver executando ou ainda não foi executada, é só você atribuir a propriedade dela chamada PRIORITY. Ela aceita valores do tipo TThreadPriotity. Olhe o que o Help do delphi tem a dizer:
tpIdle The thread executes only when the system is idle. The system will not interrupt other threads to execute a thread with tpIdle priority. tpLowest The thread´s priority is two points below normal. tpLower The thread´s priority is one point below normal. tpNormalThe thread has normal priority. tpHigherThe thread´s priority is one point above normal. tpHighestThe thread´s priority is two points above normal. tpTimeCriticalThe thread gets highest priority.
Espero ter te ajudado
GOSTEI 0
Sgubert
13/05/2004
Olá nildo!
Ajudou sim, mas de repente vc poderia ser mais claro com relação a esse tipo TThreadPriotity. Não faço ideia de como funciona, estou bem perdido. E outra dúvida, se por acaso eu tiver uma thread com prioridade alta executando, dai ela perde o processador, meu programa cria uma nova thread e começa a executa-la e ela se atribui uma prioridade normal. Nesse momento será verificado se existe outra thread de mais lata prioridade ou isso só será feito quando a thread em execução perder o processador...???
Qui duvida complicada não émesmo??? rsrsrs :(
Espero que me ajude novamente e obrigado pelas dicas ate agora...
[]´s
Samuel Gubert
Ajudou sim, mas de repente vc poderia ser mais claro com relação a esse tipo TThreadPriotity. Não faço ideia de como funciona, estou bem perdido. E outra dúvida, se por acaso eu tiver uma thread com prioridade alta executando, dai ela perde o processador, meu programa cria uma nova thread e começa a executa-la e ela se atribui uma prioridade normal. Nesse momento será verificado se existe outra thread de mais lata prioridade ou isso só será feito quando a thread em execução perder o processador...???
Qui duvida complicada não émesmo??? rsrsrs :(
Espero que me ajude novamente e obrigado pelas dicas ate agora...
[]´s
Samuel Gubert
GOSTEI 0
Nildo
13/05/2004
O esquema de prioridade é gerenciado pelo próprio Windows. Mais ou menos assim:
Quando o ThreadPriority = tpIdle, a Thread só será executada quando nenhuma outra Thread estiver fazendo alguma tarefa pesada. Já com o tpTimeCritical, a Thread recebe tratamento de chefe do Processador, sua thread começa a ser executada naquele momento, deixando todas as outras threads mais lentas, consequentimente parando as que forem tpIdle. Então tudo é relativo, uma coisa é ligada com a outra. Se uma recebe prioridade, uma delas tem que deixar de ter. Entendeu? Mas isso é trabalho do processador
Quando o ThreadPriority = tpIdle, a Thread só será executada quando nenhuma outra Thread estiver fazendo alguma tarefa pesada. Já com o tpTimeCritical, a Thread recebe tratamento de chefe do Processador, sua thread começa a ser executada naquele momento, deixando todas as outras threads mais lentas, consequentimente parando as que forem tpIdle. Então tudo é relativo, uma coisa é ligada com a outra. Se uma recebe prioridade, uma delas tem que deixar de ter. Entendeu? Mas isso é trabalho do processador
GOSTEI 0
Sgubert
13/05/2004
Ok nildo, ate ai tudu bem!!
Mas a grande dúvida é a seguinte. Se eu tiver 4 threads com prioridade alta e 6 com prioridade normal. Eu tenho a garantia de que as com maior prioridade serão executadas primeiro ou somente tenho a garantia delas utilizarem mais tempo o processador. Preciso garantir que determindas threads sejam executadas primeiro, por isso estou pesquisando sobre prioridade.
Agradeço toda ajuda ate agora
[]´s
Samuel
Mas a grande dúvida é a seguinte. Se eu tiver 4 threads com prioridade alta e 6 com prioridade normal. Eu tenho a garantia de que as com maior prioridade serão executadas primeiro ou somente tenho a garantia delas utilizarem mais tempo o processador. Preciso garantir que determindas threads sejam executadas primeiro, por isso estou pesquisando sobre prioridade.
Agradeço toda ajuda ate agora
[]´s
Samuel
GOSTEI 0
Nildo
13/05/2004
Somente em relação ao processamento. Quem vai executar primeiro ou depois, é seu programa quem define. Você vai ter que programar isso :(
GOSTEI 0