visual threading thread studio sirve que para hacer como c#

c# - threading - thread.sleep java



Alternativas a Thread.Sleep() para simular pausas (9)

simulando una pausa

"Simular" suena como algo que solo harías en la depuración. Thread.Sleep debe estar bien.

El principal problema de Sleep es que, por lo general, debe esperar a que ocurra algo específico en lugar de esperar un retraso arbitrario.

La otra cosa a tener en cuenta es llamar a Thread.Sleep desde un subproceso de la interfaz de usuario, lo que hará que la IU no responda. Es mejor deshabilitar las partes de la interfaz de usuario con las que no desea que el usuario interactúe y luego usar un control de Timer para implementar el retraso.

Entonces Thread.Sleep () es malo ( http://msmvps.com/blogs/peterritchie/archive/2007/04/26/thread-sleep-is-a-sign-of-a-poorly-designed-program.aspx ).

¿Hay alguna alternativa recomendada para simular una pausa en la ejecución de un programa? Por ejemplo, un bucle? Aunque supongo que esto implica una gran cantidad de gastos generales al inicializar variables, comprobar la condición bool, etc.

Gracias


Creo que Raymond Chen ha recomendado establecer una prioridad de hilo más baja

http://blogs.msdn.com/oldnewthing/archive/2009/07/27/9849503.aspx

No entiendo muy bien por qué quieres hacer una pausa de vez en cuando. ¿Por qué no solo hacer el trabajo con baja prioridad? Cuando hay cosas más importantes que hacer, tu hilo de fondo dejará de hacer lo que sea que esté haciendo. Cuando hay una CPU disponible, entonces el subproceso en segundo plano lo hará tan rápido como sea posible (hasta que llegue algo con mayor prioridad).


Estaría dispuesto a apostar que en la mayoría de los casos en los que un programador piensa usar Thread.Sleep (), algún código simple que use event s funcionaría muy bien.


No estoy de acuerdo con la evaluación de que Thread.Sleep() es "malo". Depende de la situación.

En un programa en modo consola, podría ser perfectamente apropiado dormir el hilo si estás esperando algo. Tal vez incluso en un bucle: verifique la condición, duerma un poco si no está satisfecho, repita.

Sin embargo, en un programa gráfico, normalmente no dormiría en el hilo principal (GUI). Esto se debe a que en estos días las interfaces GUI están diseñadas con un solo hilo interactivo. Si duermes en ese hilo, tu GUI completa aparecerá "bloqueada" durante el tiempo que estás durmiendo. Una mejor situación podría ser el uso de algún tipo de temporizador (todos los marcos de GUI tienen ese concepto).

Una cosa que no quieres hacer es escribir un bucle que compruebe continuamente que alguna condición sea verdadera, sin siquiera dormir. Esto hará que una CPU se ejecute hasta el 100% porque la CPU quiere hacer su trabajo lo más rápido posible. Esto no solo es inesperado desde el punto de vista del usuario, sino que también es hostil porque dicha actividad puede matar el proceso que realmente está esperando de suficientes ciclos para realizar su trabajo.


Por lo que dijiste, estás tratando de simular una pausa en la ejecución.

Thread.Sleep es perfectamente válido para eso. Incluso el artículo que has vinculado comienza con:

Thread.Sleep tiene su uso: simular operaciones prolongadas mientras se prueba / depura en un hilo MTA.


Si bien el artículo en sí es discutible, estoy de acuerdo con su oración inicial, que aborda su preocupación

Thread.Sleep tiene su uso: simular operaciones prolongadas mientras se prueba / depura en un hilo MTA. En .NET no hay otra razón para usarlo.

Creo que eso es lo que estás preguntando (simulando pausas) y es el uso principal de Thread.Sleep ()


Si está esperando que ocurra algún código o evento, puede usar los controladores de espera.



Si solo va a simular una pausa (como para propósitos de prueba), creo que Thread.Sleep es un enfoque perfectamente válido. Por otro lado, si realmente está esperando algo, algún tipo de mecanismo de señalización seguro para subprocesos sería mejor (verifique los tipos que heredan WaitHandle ).