实现双线程请教!

PLeeA 2011-10-26 02:53:31
本人现有两个函数A和B,由于A和B的处理时间均较长(A先于B执行,B的数据来自A执行后的结果),所以希望能用双线程节约程序运行时间。
由于本人从未处理过线程问题,属于菜鸟!希望各位多多指点,尽可能详细些!不胜感激!
...全文
121 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
PLeeA 2011-11-06
  • 打赏
  • 举报
回复
谢谢各位的热心帮助!
PLeeA 2011-11-06
  • 打赏
  • 举报
回复
谢谢各位的热现象帮助!
xiaoshang_program 2011-10-30
  • 打赏
  • 举报
回复
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)
// {
//
// TCHAR* pInfo = new TCHAR[MAX_PATH];
// ZeroMemory(pInfo,MAX_PATH);
// if(!PostThreadMessage(uMainThreadID,WM_PRO_CREATE,(WPARAM)pInfo,0))
// {
// printf("post message failed,errno:%d\n",::GetLastError());
// delete[] pInfo;
// break;
// }
// ::Sleep(1000);
// if(GetMessage(&RequestMsg,0,0,0))
// {
// switch(RequestMsg.message)
// {
// case WM_PRO_ERROR:
// printf("Error time :%ld \n",RequestMsg.time);
// break;
// case WM_QUIT:
// break;
// }
// }
// }

写的玩 不怎么别见笑呀
用户 昵称 2011-10-28
  • 打赏
  • 举报
回复
// 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;
}

一个简单的例子
PLeeA 2011-10-26
  • 打赏
  • 举报
回复
本人对线程操作一点儿也不会,确实不知道前前后后的步骤,望各位举例说明一下,急啊!拜托各位了!
PLeeA 2011-10-26
  • 打赏
  • 举报
回复
能不能举个具体的简单例子,或伪代码?谢谢各位了!
oyljerry 2011-10-26
  • 打赏
  • 举报
回复
把A和B放到各自一个线程中,_beginthreadex,然后注意线程同步,让B等待A的数据
Eleven 2011-10-26
  • 打赏
  • 举报
回复
AfxBeginThread创建线程,注意同步问题

15,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧