delphi 简单线程问题
beginthread方法打开一个线程怎么同步vcl我知道重写tthread能在execute用synchronize来同步vcl但是我用beginthread方法不知道...
beginthread方法打开一个线程 怎么同步vcl
我知道重写tthread能在execute用synchronize来同步vcl
但是我用beginthread方法不知道怎么同步,麻烦各位高手告诉我下 展开
我知道重写tthread能在execute用synchronize来同步vcl
但是我用beginthread方法不知道怎么同步,麻烦各位高手告诉我下 展开
1个回答
展开全部
用临界区来同步 ,你把线程函数里要同步的主要代码前后加临界区
先声明一个TRTLCriticalSection类型的全局变量
var
MyCs:TRTLCriticalSection;
在程序开始或建立线程之前,初始化
InitializeCriticalSection(MyCs);//初始化临界区
在程序结束或所有线程结束后,删除它
DeleteCriticalSection(MyCs);//删除临界界
再在线程中要同步的地方加入
EnterCriticalSection(MyCs); //进入临界区
try
//要同步的程序代码
finally
LeaveCriticalSection(MyCs); //离开临界区
end;
先声明一个TRTLCriticalSection类型的全局变量
var
MyCs:TRTLCriticalSection;
在程序开始或建立线程之前,初始化
InitializeCriticalSection(MyCs);//初始化临界区
在程序结束或所有线程结束后,删除它
DeleteCriticalSection(MyCs);//删除临界界
再在线程中要同步的地方加入
EnterCriticalSection(MyCs); //进入临界区
try
//要同步的程序代码
finally
LeaveCriticalSection(MyCs); //离开临界区
end;
追问
我在
EnterCriticalSection(MyCs); //进入临界区
try
showmessage('ff');
finally
LeaveCriticalSection(MyCs); //离开临界区
这样就报错了 该怎么办哥们
追答
报的什么错 ,我估计是showmessage的问题,在线程里不要用这个提示框,他是Delphi专为UI写的提示框,与FORM联系紧密,你改成Messagebox提示应该就OK了
showmessage('ff');
改成
messagebox(0,'ff','caption',0);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询