我有以下一个程序:
A{
...
//此处有两个变量a,b被下面的函数引用
B(a,b)//此函数较费时
...}
A函数在不断得被执行.
我想把B函数用一个线程来使用,以免影响B之后的执行,不知用多线程能否解决,如何解决,麻烦给个例子.谢谢!
A{
...
//此处有两个变量a,b被下面的函数引用
B(a,b)//此函数较费时
...}
A函数在不断得被执行.
我想把B函数用一个线程来使用,以免影响B之后的执行,不知用多线程能否解决,如何解决,麻烦给个例子.谢谢!
解决方案 »
- 【求算法】如何较快的加载文件夹内的千万级别的文件
- makefile 无法打开编译器生成的文件msado15.tlh
- 如何用socket实现一台服务器与多个客户端同时通信
- visual studio 编译时系统文件报错错误
- Activex密码控件?
- 有关SetTimer的问题!
- 用c语言实现 trimLeft 怎么做比较好?
- 求《Windows核心编程》的源代码!Email:[email protected]
- 如何获取硬盘和CPU的序列号?
- 窗口边框如何绘制
- 急!!!对话框子窗口的问题
- 求助,为什么在VC中使用VK_ALT,VK_D,VK_1等等虚键码的时候会出错,而VK_CONTROL却可以用啊?
UINT ReadThreadKey(LPVOID lParam)
{
return 1;
}在A 中启动AfxBeginThread(ReadThreadKey,&m_Key);
#include <windows.h>
#define THREADCOUNT 4
DWORD dwTlsIndex;
VOID ErrorExit(LPTSTR);
VOID CommonFunc(VOID)
{
LPVOID lpvData;
// Retrieve a data pointer for the current thread.
lpvData = TlsGetValue(dwTlsIndex);
if ((lpvData == 0) && (GetLastError() != 0))
ErrorExit("TlsGetValue error");
// Use the data stored for the current thread.
printf("common: thread %d: lpvData=%lx\n",
GetCurrentThreadId(), lpvData);
Sleep(5000);
}
DWORD WINAPI ThreadFunc(VOID)
{
LPVOID lpvData;
// Initialize the TLS index for this thread.
lpvData = (LPVOID) LocalAlloc(LPTR, 256);
if (! TlsSetValue(dwTlsIndex, lpvData))
ErrorExit("TlsSetValue error");
printf("thread %d: lpvData=%lx\n", GetCurrentThreadId(), lpvData);
CommonFunc();
// Release the dynamic memory before the thread returns.
lpvData = TlsGetValue(dwTlsIndex);
if (lpvData != 0)
LocalFree((HLOCAL) lpvData);
return 0;
}
DWORD main(VOID)
{
DWORD IDThread;
HANDLE hThread[THREADCOUNT];
int i;
// Allocate a TLS index.
if ((dwTlsIndex = TlsAlloc()) == -1)
ErrorExit("TlsAlloc failed");
// Create multiple threads.
for (i = 0; i < THREADCOUNT; i++)
{
hThread[i] = CreateThread(NULL, // no security attributes
0, // use default stack size
(LPTHREAD_START_ROUTINE) ThreadFunc, // thread function
NULL, // no thread function argument
0, // use default creation flags
&IDThread); // returns thread identifier
// Check the return value for success.
if (hThread[i] == NULL)
ErrorExit("CreateThread error\n");
}
for (i = 0; i < THREADCOUNT; i++)
WaitForSingleObject(hThread[i], INFINITE);
return 0;
}
VOID ErrorExit (LPTSTR lpszMessage)
{
fprintf(stderr, "%s\n", lpszMessage);
ExitProcess(0);
}
避免影响ui Thread的响应问题!