En VC, ¿cómo llaman varios subprocesos a funciones miembro de una clase?
Llamada interna de función: HANDLE hThread1=CreateThread(NULL,0,Fun1Proc,(LPVOID)this,0,NULL);
HANDLE hThread0=CreateThread(NULL,0,( LPTHREAD_START_ROUTINE )thread,&m_prog,0,NULL);
CloseHandle(hThread0);
CloseHandle(hThread1);)
Sleep(100); p >
}
DWORD WINAPI ListenThreadFunc(LPVOID lpParameter)
{
CTestDlg *pDlg=(CTestDlg *)lpParameter;//Pasar lo pasado Luego, los parámetros se fuerzan a volver a convertirse al tipo CTestDlg *
pDlg->GetDlgItem(IDC_EDIT1)->SetWindowText("abc");//Eso es todo
} p>
thread(CProgressCtrl *pro)//Actualizar barra de progreso
{
int i=0;
for(;i<100; )
{
pro->SetPos(i);
Dormir(200);
i=i+5;
if(i>94)
i=1;
else
;
if(stopmark= =1)
{
pro->SetPos(0);
descanso;
}
}
return 0;
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter)//Programa de llamada
{
CCOTSDlg * pDlg=(CCOTSDlg *)lpParameter;//Forzar que los parámetros pasados regresen al tipo CTestDlg *
pDlg->Modeprocess();//Eso es todo
return 0 ;
}
Controlar subprocesos múltiples, iniciar, pausar, continuar, finalizar (ejemplo)
Los que somos analfabetos nunca hemos escuchado la palabra Antes, pensaba que el subproceso múltiple era muy avanzado y difícil de manejar. ! Ayer navegué por MSDN y descubrí que no es tan difícil. La clave está en una comprensión integral. ¡Quizás lo entiendas gradualmente si usas más API! ! !
¡He resumido algunos fáciles de entender y los comparto juntos!
¡No hablemos de cómo usar los parámetros en el proceso de subprocesos; comencemos con uno simple, en el próximo artículo hablaremos sobre cómo usar los parámetros en el proceso de subprocesos para lograr la interacción!
AfxBeginThread Crear hilo
Prototipo de función:
CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc,
LPVOID pParam ,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL p>
);
Esta función se utiliza para crear un hilo; el tipo de valor de retorno es: CWinThread*, un objeto de hilo que apunta al nuevo hilo
Parámetros:
pfnThreadProc
La función de entrada del hilo debe declararse de la siguiente manera: UINT MyThreadFunction( LPVOID pParam
pParam:
Parámetros; pasado al hilo, tenga en cuenta que su tipo es: LPVOID, por lo que podemos pasar una estructura al hilo
nPrioridad:
La prioridad del hilo, generalmente establecida en 0. Déjelo tener * con el hilo principal **La misma prioridad
nStackSize:
Especifica el tamaño de la pila del hilo recién creado. Si es 0, el hilo recién creado tiene. pila del mismo tamaño que el hilo principal
dwCreateFlags:
Especifique qué indicadores tendrá el hilo después de crear el hilo. Puede especificar dos valores:
CREATE_SUSPENDED. :
Después de crear el hilo, estará en estado suspendido hasta que: se llame a ResumeThread
0 :
Comience a ejecutarse después de que se cree el hilo.
lpSecurityAttrs:
Apunta a una estructura de SECURITY_ATTRIBUTES, que se utiliza para marcar la seguridad del hilo recién creado. Si es NULL,
Entonces. el hilo recién creado tiene la misma seguridad que el hilo principal.
Si desea finalizar el hilo dentro del hilo, puede llamar a AfxEndThread dentro del hilo.
Dos formas de finalizar el hilo
Cuando usas un hilo para imprimir algunos gráficos en el fondo. A veces, después de imprimir una parte, quieres detenerlo, así que a continuación te explicaremos en detalle cómo detener el hilo. formas de finalizar el hilo
1: Esta es la forma más simple, es decir, dejar que la función del hilo complete su ejecución y el hilo finaliza normalmente. Devolverá un valor, generalmente 0 significa finalización exitosa.
p>
Por supuesto, puede definir el suyo propio según corresponda. El valor representa la ejecución exitosa del hilo. Llamar a AfxEndThread en el hilo finalizará directamente el hilo. En este momento, todos los recursos del hilo se reciclarán. /p>
2: Si desea que otros Un subproceso B finalice el subproceso A, entonces debe pasar información entre estos dos subprocesos.
Ya sea un subproceso de trabajo o un subproceso de interfaz, si desea obtener el resultado exacto después de que finalice el hilo. Entonces puede llamar:
::Función GetExitCodeThread
--------------- ----------- --------------------------------------- ----------- --
--------------------------------------------------
SuspendThread se bloquea Iniciar (suspender) hilo
Prototipo de función:
DWORD SuspendThread(
HANDLE hThread //Especifica el identificador del thread
);
El valor de retorno de esta función: tipo DWORD Si esta función tiene éxito, el valor de retorno es el recuento previo a la detención del hilo; de lo contrario, (representa) - 1.
------------------------------------------- ----- --------------------------------------------- ----- ----------------------------------
ResumeThread continúa la ejecución del hilo
Prototipo de función:
DWORD ResumeThread(
HANDLE hThread //Especifica el identificador del hilo
);
El valor de retorno de esta función: tipo DWORD Si esta función tiene éxito, el valor de retorno es el recuento previo a la detención del subproceso; de lo contrario, (representa) - 1.
------------------------------------------- ----- --------------------------------------------- ----- -------------------------------------
Esperarun solo objeto finaliza el hilo
DWORD WaitForSingleObject(
HANDLE hHandle,
DWORD dwMillisegundos
Parámetros
hHandle
es un identificador de evento
dwMillisegundos
en el intervalo de pausa especificado, en milisegundos. Esta función volverá si el intervalo ha transcurrido, incluso si el estado del objeto no está señalizado. Si dwMillisegundos es cero, la función prueba el estado del objeto y lo devuelve. Si dwMillisegundos es INFINITO, el intervalo de pausa de esta función nunca transcurre.