线程你只要不告诉它等待,它是不会等其他线程先结束的。什么是线前羡程,线程天生就是并行运行分支租悔宏,哪怕你给它最低的优先级,那它也只是在同一时刻相比其他线程被执行的几率较低,而完全没有道理停下来等待。
如果你要让它等待,有很弊册多办法,例如,最简单:
public class Test extends Thread {
private static Object lock = new Object()
public static void main(String[] args) {
try {
Test p1 = new Test()
Test p2 = new Test()
p1.setName("线程1")
p2.setName("线程2")
p1.setPriority(MAX_PRIORITY)
p2.setPriority(MIN_PRIORITY)
p1.start()
while (p1.getState() != Thread.State.TERMINATED)
p2.start()
} catch (Exception e) {
e.printStackTrace()
}
}
public void run() {
for (int i = 0i <= 5i++) {
System.out.println(getName() + " ")
}
}
}
虽然有主线程这一说法(调用main的线程),但对于WINDOWS来说,所有线程都是平等的,并没有主次之分,因此也不会提供获得主线程的函数弯搭早码或方法.但要找到调用main的线程倒是有些方法可行的,虽然不一定正确.1,获取线程的创建时间,通常情况下主线程的创建时间是最早的
2,如果是GUI程序,可以通过GetWindowThreadProcessId获取窗口的线程,通常程序员都使用主线程创建窗口
3,其中有一种是线程堆栈查找main函数的地址,如果发现了那就是所谓的主线程.
其实这个问题跟窗口一样,对于程序员来说一个进埋睁拿程有主窗口,但对于WINDOWS来说只有父窗口和子窗口的概念(但据<WINDOWS核心编程>里的说法,WINDOWS连线程的父子关系也不保存),所以也没用获取主窗口的API
MSDN关于AfxGetMainWnd 函数的说明:If your application is an OLE server, call this function to retrieve a pointer to the active main window of the application instead of directly referring to the m_pMainWnd member of the application object.
你可以搭宏去看一下具体的;
在这里我推荐一个方法,
你将IDC_LIST1控件添加到了一个对森枝银话框中,那么我假设与这个对话框绑定的类为CXXXDlg
让线程函数带一个此宴参数,参数类型为 你要设置文本的 对话框类的指针比如 CXXXDlg *pDlg
创建线程时,若是在CXXXDlg的成员函数中创建,那么直接传入这个对话框的this指针;
否则先实例化CXXXDlg类的一个对象 CXXXDlg Dlg;
再传入Dlg.this 指针
在线程函数的while循环中,调用 pDlg->SetDlgItemText(IDC_LIST1,strTime)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)