VC++ 多线程

如何创建一个与消息循环并列的线程?比如要把以下两段代码做成2个并列的线程,同时进行(但不一定要同步),一段是消息循环,一段是计时间的。代码如下:消息循环:LRESULTC... 如何创建一个与消息循环并列的线程?
比如要把以下两段代码做成2个并列的线程,同时进行(但不一定要同步),一段是消息循环,一段是计时间的。代码如下:
消息循环:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_LBUTTONDOWN:
MessageBox(NULL,"hello","hello",MB_OK);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

计时间:
for(;;)
{
Sleep(10);
}

请问如何把这两段代码做成两个并列的线程?
展开
 我来答
CIW_BLUE
2009-01-10 · TA获得超过487个赞
知道小有建树答主
回答量:178
采纳率:0%
帮助的人:0
展开全部
你的意思说程序可以同时做2件事,不会因为一件而暂停吧.
下面的代码就是你说的

// MultipleThread.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "MultipleThread.h"
#include <TChar.h>

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
DialogBox(NULL, MAKEINTRESOURCE(IDD_ABOUTBOX), NULL, About);
return (int) 0;
}

const int MAX_PROCESS_PRIORITY_NUM = 5;
const int MAX_THREAD_PRIORITY_NUM = 6;

TCHAR* pszProcPriorityName[MAX_PROCESS_PRIORITY_NUM] = {L"High", L"Above Normal", L"Normal", L"Below Normal", L"Idle"};
TCHAR* pszThreadPriorityName[MAX_THREAD_PRIORITY_NUM] = {L"High", L"Above Normal", L"Normal", L"Below Normal", L"Lowst", L"Idle"};

int nProcessPriority[MAX_PROCESS_PRIORITY_NUM] = {HIGH_PRIORITY_CLASS, ABOVE_NORMAL_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS,
BELOW_NORMAL_PRIORITY_CLASS, IDLE_PRIORITY_CLASS };

int nThreadPriority[MAX_THREAD_PRIORITY_NUM] = {THREAD_PRIORITY_HIGHEST, THREAD_PRIORITY_ABOVE_NORMAL, THREAD_PRIORITY_NORMAL, THREAD_PRIORITY_BELOW_NORMAL,
THREAD_PRIORITY_LOWEST, THREAD_PRIORITY_IDLE};

HWND hDlg = NULL;

DWORD WINAPI MyThread(PVOID pvParam) //计数线程函数
{
DWORD nCount = 0;
while(nCount ++ < MAXLONG)
{
SetDlgItemInt(hDlg, IDC_EDIT2, nCount, false);
}
return 0;
}

HANDLE hThread = NULL;

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
for(int i = 0; i < MAX_PROCESS_PRIORITY_NUM; i++)
SendDlgItemMessage(hDlg, IDC_COMBO2, CB_ADDSTRING, 0, (LPARAM)pszProcPriorityName[i]);

SendDlgItemMessage(hDlg, IDC_COMBO2, CB_SETCURSEL, 2, 0);

for(int i = 0; i < MAX_THREAD_PRIORITY_NUM; i++)
SendDlgItemMessage(hDlg, IDC_COMBO3, CB_ADDSTRING, 0, (LPARAM)pszThreadPriorityName[i]);

SendDlgItemMessage(hDlg, IDC_COMBO3, CB_SETCURSEL, 2, 0);

hThread = CreateThread(NULL, 0, MyThread, (PVOID)&hDlg, CREATE_SUSPENDED,NULL); //创建一个新的进程

EnableWindow(GetDlgItem(hDlg, IDC_BUTTON3), false);

::hDlg = hDlg;

SetProcessPriorityBoost(GetCurrentProcess(), false);
SetThreadPriorityBoost(hThread, false);

return (INT_PTR)TRUE;

case WM_COMMAND:
if (HIWORD(wParam) == CBN_SELCHANGE)
{
if(LOWORD(wParam) == IDC_COMBO2)
{
int nIndex = SendDlgItemMessage(hDlg, IDC_COMBO2, CB_GETCURSEL, 0, 0);
SetPriorityClass(GetCurrentProcess(), nProcessPriority[nIndex]);
}
else if(LOWORD(wParam) == IDC_COMBO3)
{
int nIndex = SendDlgItemMessage(hDlg, IDC_COMBO3, CB_GETCURSEL, 0, 0);
SetThreadPriority(hThread, nThreadPriority[nIndex]);
}
return (INT_PTR)TRUE;
}
else if(LOWORD(wParam) == IDC_BUTTON2)
{
EnableWindow(GetDlgItem(hDlg, IDC_BUTTON3), true);
EnableWindow(GetDlgItem(hDlg, IDC_BUTTON2), false);
ResumeThread(hThread);

MessageBox(hDlg, L"Resume", L"提示", MB_OK);
}
else if(LOWORD(wParam) == IDC_BUTTON3)
{
EnableWindow(GetDlgItem(hDlg, IDC_BUTTON2), true);
EnableWindow(GetDlgItem(hDlg, IDC_BUTTON3), false);
SuspendThread(hThread);
MessageBox(hDlg, L"Suspend", L"提示", MB_OK);
}
break;

case WM_CLOSE:
CloseHandle(hThread);
ExitProcess(0);
break;
}
return (INT_PTR)FALSE;
}
magic_knife
2009-01-10 · TA获得超过848个赞
知道小有建树答主
回答量:2882
采纳率:0%
帮助的人:948万
展开全部
在SetTimer 换成 CreateThread
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式