为什么我在Java SWT项目中运行的c ++代码暂停?

时间:2014-02-17 14:54:15

标签: java c++ multithreading user-interface

我有一个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 ++?

提前致谢,

0 个答案:

没有答案