我有一个c ++项目,我想要一个GUI。所以,我决定使用SWT在Java中编写GUI。
我首先使用一些输入运行Java,然后用Process p = Runtime.exec(...)
启动c ++项目。每个sec c ++项目都会将一些字符串(某些图像的路径)写入输出文件,java会读取它并相应地更改GUI上的图像。
奇怪的是,Java代码一度继续运行,但c ++代码暂停了。当我通过杀死GUI(不会停止c ++项目)来停止Java代码时,它会继续运行。当我运行两次java代码时,两次停止,我杀死其中一个,另一个继续。
这是更新GUI的Java代码。
public void open() throws InterruptedException {
display = Display.getDefault();
createContents();
shell.open();
shell.layout();
Thread updateThread = new Thread() {
public void run() {
while (true) {
try {
Thread.sleep(860);
} catch (InterruptedException e) {
e.printStackTrace();
}
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
System.out.println("hi " + count);
count++;
refreshPanel();
}
});
}
}
};
updateThread.setDaemon(true);
updateThread.start();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
在这段代码中,当c ++暂停计数继续更新时,我知道java没有暂停。
它取决于我time
使我的java线程睡眠的Thread.sleep(value)
停止在不同的元素中。
请注意,我的c ++代码运行两个线程,每个线程写入不同的文件,每个文件分别由Java读取(用于不同的目的)。
编辑:当我在visual studio中运行c ++时,它不会出现任何错误或者没有暂停。
我的c ++代码基本如下
int main(){
string str1 = "sth1", str2 = "sth2";
boost::thread bs_t = boost::thread( binary_search,str1,str2);
boost::thread ls_t = boost::thread( linear_search,str1,str2);
bs_t.join();
ls_t.join();
}
void binary_search(string str1, string str2){
if(some_condition)
return;
num_comp_bs++;
ofstream myrec_file(project_dir+"\\bin_file.ini");
boost::mutex _mtx;
_mtx.lock();
myrec_file << num_comp_bs << endl;
myrec_file.close();
_mtx.unlock();
//here I do some I/O operations and some matrix calculations
binary_search(str1, newstr1);
binary_search(str1, newstr2);
}
void linear_search(string str1, string str2){
for(int i = 1 -->n){
ofstream myrec_file(project_dir+"\\lin_file.ini");
boost::mutex _mtx;
_mtx.lock();
myrec_file << num_element_passed << endl;
myrec_file.close();
_mtx.unlock();
//here I do some I/O operations and some matrix calculations
}
}
另请注意,它不会出现任何错误。
知道什么可能导致c ++被暂停? 由于某种原因,Windows是否可能阻止c ++?
提前致谢,