线程操作:CreateThread
来源:互联网 发布:js图片触摸缩放 编辑:程序博客网 时间:2024/06/03 21:07
在上次写的遍历全盘指定文件的程序中存在着一个问题:程序运行的时候,界面就锁定了,不能移动,不能最小化,就好像卡死了一样。现在讲遍历函数放在一个线程中执行,就不会出现这种情况:这里有两个难点
1.一般线程都是进行一些如界面无关的复杂计算,这里需要将遍历结果显示在Memo中,就涉及到如何在线程中对窗体上控件的操作
==========================================================
DWORD WINAPI ThreadProc(LPVOID LpParamter) //注意 线程过程的定义方式
{
TForm1* b;
b= (TForm1*)LpParamter;
//EnterCriticalSection();
b->MyEnumFiles("F:\\","*.*");
//LeaveCriticalSection();
return 0;
}
=========================================================
DWORD id; //按钮事件中的执行代码
HANDLE hwnd=CreateThread(NULL,0,ThreadProc,(void*)this,NULL,&id);
CloseHandle(hwnd);
========================================================
这里采用的办法是将窗体Form1这个类的指针作为参数传递给线程过程。(这里的思想跟sendmessage发送消息的参数很相似),如果有多线程的话要注意线程同步。
同时这里将MyEnumFiles()函数放到TForm1类中,作为其中的一个成员函数。这样就避免了在线程过程中调用子函数,造成的同步问题。
2.因为线程过程的格式是固定的,只能向其中传递一个参数,当线程过程需要用到多个参数时候怎么办?
可以用一个结构体struct 来记录所需参数,然后将该结构体的指针作为线程过程的参数,如:
struct A{
int arg1;
void* arg2;
double arg3 }
A argv;
CreateThread(NULL,0,ThreadProc,(void*)&argv,NULL,&id); //将指针传递给线程过程
然后在线程过程中将线程参数再还原为A这样的结构体即可:
DWORD WINAPI ThreadProc(LPVOID LpParamter)
{
A* b;
b= (A*)LpParamter;//便可以从b这个结构体中取出参数;
.....
......
return 0;
}
1.一般线程都是进行一些如界面无关的复杂计算,这里需要将遍历结果显示在Memo中,就涉及到如何在线程中对窗体上控件的操作
==========================================================
DWORD WINAPI ThreadProc(LPVOID LpParamter) //注意 线程过程的定义方式
{
TForm1* b;
b= (TForm1*)LpParamter;
//EnterCriticalSection();
b->MyEnumFiles("F:\\","*.*");
//LeaveCriticalSection();
return 0;
}
=========================================================
DWORD id; //按钮事件中的执行代码
HANDLE hwnd=CreateThread(NULL,0,ThreadProc,(void*)this,NULL,&id);
CloseHandle(hwnd);
========================================================
这里采用的办法是将窗体Form1这个类的指针作为参数传递给线程过程。(这里的思想跟sendmessage发送消息的参数很相似),如果有多线程的话要注意线程同步。
同时这里将MyEnumFiles()函数放到TForm1类中,作为其中的一个成员函数。这样就避免了在线程过程中调用子函数,造成的同步问题。
2.因为线程过程的格式是固定的,只能向其中传递一个参数,当线程过程需要用到多个参数时候怎么办?
可以用一个结构体struct 来记录所需参数,然后将该结构体的指针作为线程过程的参数,如:
struct A{
int arg1;
void* arg2;
double arg3 }
A argv;
CreateThread(NULL,0,ThreadProc,(void*)&argv,NULL,&id); //将指针传递给线程过程
然后在线程过程中将线程参数再还原为A这样的结构体即可:
DWORD WINAPI ThreadProc(LPVOID LpParamter)
{
A* b;
b= (A*)LpParamter;//便可以从b这个结构体中取出参数;
.....
......
return 0;
}
0 0
- 线程操作:CreateThread
- 用CreateThread()创建线程
- 使用CreateThread创建线程
- 创建线程 - CreateThread
- 线程CreateThread 用法
- CreateThread函数--创建线程
- 线程创建函数CreateThread
- CreateThread线程函数
- CreateThread 线程参数示例
- CreateThread线程函数
- CreateThread创建线程函数
- -创建线程的函数CreateThread
- 避免使用CreateThread 创建线程
- _beginthread和CreateThread 创建线程
- 使用CreateThread函数创建线程
- CreateThread
- CreateThread
- CreateThread
- Python 读写文件
- java 并发编程实战第三章同步辅助类CyclicBarrier解析
- 【iOS开发-背景】关于按钮背景图片的拉伸
- topbar
- 面向移动设备的HTML5开发框架
- 线程操作:CreateThread
- C++函数调用过程深入分析
- mavne error
- 修改oracle编码集
- winform音乐播放器的实现
- Anroid KEYCODE列表
- 数据结构和算法经典100题-第10题
- LeetCode147: Insertion Sort List
- 函数指针与指针函数