实现双线程请问
实现双线程请教!
本人现有两个函数A和B,由于A和B的处理时间均较长(A先于B执行,B的数据来自A执行后的结果),所以希望能用双线程节约程序运行时间。
由于本人从未处理过线程问题,属于菜鸟!希望各位多多指点,尽可能详细些!不胜感激!
------解决方案--------------------
AfxBeginThread创建线程,注意同步问题
------解决方案--------------------
把A和B放到各自一个线程中,_beginthreadex,然后注意线程同步,让B等待A的数据
------解决方案--------------------
本人现有两个函数A和B,由于A和B的处理时间均较长(A先于B执行,B的数据来自A执行后的结果),所以希望能用双线程节约程序运行时间。
由于本人从未处理过线程问题,属于菜鸟!希望各位多多指点,尽可能详细些!不胜感激!
------解决方案--------------------
AfxBeginThread创建线程,注意同步问题
------解决方案--------------------
把A和B放到各自一个线程中,_beginthreadex,然后注意线程同步,让B等待A的数据
------解决方案--------------------
- C/C++ code
// test_2_thread.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "windows.h" HANDLE thread1_finish; DWORD __stdcall thread1( LPVOID para ) { int i; for( i = 0; i < 10; i++ ) { printf( "%d\r\n", i ); Sleep( 500 ); } printf( "thread1 finished\r\n" ); SetEvent( thread1_finish ); return 0; } DWORD __stdcall thread2( LPVOID para ) { WaitForSingleObject( thread1_finish, INFINITE ); printf( "thread2 finished\r\n" ); return 0; } int main(int argc, char* argv[]) { HANDLE id1, id2; thread1_finish = CreateEvent( NULL, TRUE, FALSE, NULL ); ResetEvent( thread1_finish ); id1 = CreateThread( NULL, 0, thread1, NULL, 0, NULL ); id2 = CreateThread( NULL, 0, thread2, NULL, 0, NULL ); WaitForSingleObject( id2, INFINITE ); CloseHandle( id1 ); CloseHandle( id2 ); return 0; }
------解决方案--------------------
HANDLE hMainThread;
UINT uMainThreadID;
UINT uRunThreadID;
// unsigned __stdcall ErrorPro(void *param)
// {
// return 0;
// }
// unsigned __stdcall ThreadProcess(void *param)
// {
// printf("thread fun start\n");
// MSG msg;
// PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_REMOVE);
// while(true)
// {
// if(GetMessage(&msg,0,0,0)) //get msg from message queue
// {
// switch(msg.message)
// {
// case WM_PRO_CREATE:
// {
// PostThreadMessage(uRunThreadID,WM_PRO_ERROR,WM_PRO_DOWNLOAD,0);
// ::Sleep(1000);
// char * pInfo = (char *)msg.wParam;
// printf("Request Create Time : %ld \n",msg.time);
// delete[] pInfo;
// break;
// }
// case WM_PRO_DISPALY:
// {
// char * pInfo = (char *)msg.wParam;
// printf("Request Display");
// delete[] pInfo;
// break;
// }
// case WM_PRO_CLOSE:
// {
// char * pInfo = (char *)msg.wParam;
// printf("Request Close");
// delete[] pInfo;
// break;
// }
// case WM_PRO_UPDATE:
// {
// char * pInfo = (char *)msg.wParam;
// printf("Request Update");
// delete[] pInfo;
// break;
// }
// default:
// printf("No Request");
// break;
// }
// }
// };
// return 0;
// }
int _tmain(int argc, _TCHAR* argv[])
{
IBase<Clog>::GetInstance()->WriteLog(_T("Start\r\n"));
// hMainThread = (HANDLE)_beginthreadex( NULL, 0, &ThreadProcess, NULL, 0, &uMainThreadID);
//
// uRunThreadID = GetCurrentThreadId();
//
// if(hMainThread == 0)
// {
// IBase<Clog>::GetInstance()->WriteLog(_T("Start Thread Failed Error\r\n"));
// return 0;
// }
// if (IBase<CPath>::GetInstance()->Init() == 0)
// {
// IBase<Clog>::GetInstance()->WriteLog(_T("Path Init Error\r\n"));
// }
//
//
//
// MSG RequestMsg;
//
// PeekMessage(&RequestMsg, NULL, WM_USER, WM_USER, PM_REMOVE);
// while(true)
// {
//