多线程挂起问题(100分)

  • 主题发起人 主题发起人 artx
  • 开始时间 开始时间
A

artx

Unregistered / Unconfirmed
GUEST, unregistred user!
我在主线程中开启一个子线程A,然后在子线程A中用suspend挂起主线程,再Show一个Form(
此Form只有线程A访问),但此时这个Form不能显示出来,程序死起,请问这是哪里出了问题?该
怎样解决?
(我用TThread对象开启线程)
 
原码!原码!
 
主要代码是:(BCB中)
TMyThread *MyThreadA;
....
.....
在主线程中,按下一个按钮,执行
{
HANDLE hThread;
//主线程句柄
hThread=DuplicateHandle(GetCurrentProcess(),GetCurrentThread(),GetCurrentProcess(),&hThread,0,FALSE,DUPLICATE_SAME__ACCESS);
MyThreadA=new TMyThread(true);
//创建线程A后使它先挂起
MyThreadA->hMainthread=hThread;
//hMainthread是TMyThread的成员变量
MyThreadA->Resume();
//启动线程A
}
在线程A中的Execute()中:
{
TForm2 *Form2;
Form2=new TForm2(Application);
//动态创建一个Form
SuspendThread(hMainthread);
//挂起主线程
Form2->ShowModal();
//显示Form2;
ResumeThread(hMainThread);
//唤醒主线程
}
我跟踪程序,在Form2->ShowModal()后程序就“死”了,Form2没有显示出来
???????
 
Form2=new TForm2(Application);

改为:
Form2=new TForm2(NULL);

如何?
 
我试过,还是一样的不行 :(
 
关了主线程看不到船体了吧.
 
foxs,主线程挂起后,主窗体不响应,用线程A创建的Form不出来。(如果不在线程A进行有关
GDI的操作,则线程A可执行下去,如用于拷贝文件等)
 
hi,大家快来帮帮我呀!!!
急!!!
 
你的主线程是什么?
就是你的application?如果是,那当然不行.你把主线程挂了,与系统的GDI交互就无法进行.
不知你为何要挂起主线程.如果是防止主线程意外访问什么的,你可以用设置信号量或者临界区等
方法来实现.
 
接受答案了.
 
后退
顶部