Ver Mensaje Individual
  #2
Antiguo 25 de agosto de 2015, 23:57
Rapinto
Gran amigo del Foro
Guru de COBOL
Activista del Foro: Activista del Foro - Issue reason: ¡Gracias! Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por ayudar mucho a los foreros Guru de los Gurus: Por solidos y amplios conocimientos - Issue reason: Por saber demasiado! 
Última Actividad 29.01.2018 20:23
Posts Posts: 240
Likes enviados Enviados: 19
Likes recibidos Recibidos: 224

Kuk,

Só queria deixar a minha opinião sobre este assunto.

A minha ideia sobre "ThruEvents" ou "Doevents" em VB6, é que a rotina que está a ser executada, deixa de ser executada e todos os eventos pendentes são processados. Em seguida retorna ao ponto onde estava.
Um exemplo concreto:

Estás a executar o código no evento "Click" dum botão.
Código COBOL:
  1. MOVE A TO B.
  2. COMPUTE A = B + C
  3. INVOKE POW-SELF "THRUEVENTS"
  4.  
  5. IF A NOT = ZERO    .....

Quando é executado o THRUEVENTS, a instrução IF a seguir não é logo executada.
Se o operador tivesse entretanto feito um click numa listview, esse código começava a ser executado por causa do THRUEVENTS e só depois regressava á instrução IF a seguir.

A opinião geral de muitos programadores é que se deve evitar o uso do THRUEVENTS, pois deixamos de ter um controlo rigoroso do que se está a executar.

Se tiveres o FujitsuCobol ver. 9, podes testar isto que eu digo.
Por outro lado, as instruções de CALL que estás a utilizar, parecem-me mais a instrução do COBOL9: INVOKE POW-SELF "REFRESH" (mas posso estar enganado).

Citado de Microsoft MSDN (DoEvents em VB6 = ThruEvents em COBOL):

Cita:
❞
DoEvents passes control to the operating system. Control is returned after the operating system has finished processing the events in its queue and all keys in the SendKeys queue have been sent.

DoEvents is most useful for simple things like allowing a user to cancel a process after it has started, for example a search for a file. For long-running processes, yielding the processor is better accomplished by using a Timer or delegating the task to an ActiveX EXE component.. In the latter case, the task can continue completely independent of your application, and the operating system takes case of multitasking and time slicing.

Caution Any time you temporarily yield the processor within an event procedure, make sure the procedure is not executed again from a different part of your code before the first call returns; this could cause unpredictable results. In addition, do not use DoEvents if other applications could possibly interact with your procedure in unforeseen ways during the time you have yielded control.
Espero que esta pequena explicação possa ajudar alguém aqui no foro.

Un saludo, Rui Pinto
Rapinto is offline   Responder Con Cita