digitalmars.D.dwt - Thread.start doesn't work?
- Plumm (5/5) Jul 31 2008 Hi:
- Frank Benoit (3/12) Jul 31 2008 can you post your code?
- Plumm (68/68) Jul 31 2008 The code is as follows:
- Frank Benoit (12/18) Jul 31 2008 It is not allowed to access any DWT function from a thread that is not
- Plumm (3/3) Aug 01 2008 Thanks for the response.
- Frank Benoit (3/8) Aug 01 2008 ok, i would like to take a look at your problem.
- Plumm (3/3) Aug 01 2008 Ignore the previous post...I made a mistake by creating a new class that...
- Sean Kelly (4/6) Aug 04 2008 Glad to hear it.
Hi: I just tried a DWT problem with a heavy file processing bound to a button.That's why I chose to use Thread, or the background thread/GUI thread would be locked and no refresh. The problem is the thread seems do nothing. And even the isRunning returns false right after calling start. The environment is dwt-win 3.4.1 with tango 0.99.7 / DMD 1.033 which is right the version downloaded from the DWT download page. Thanks for any answer.
Jul 31 2008
Plumm schrieb:Hi: I just tried a DWT problem with a heavy file processing bound to a button.That's why I chose to use Thread, or the background thread/GUI thread would be locked and no refresh. The problem is the thread seems do nothing. And even the isRunning returns false right after calling start. The environment is dwt-win 3.4.1 with tango 0.99.7 / DMD 1.033 which is right the version downloaded from the DWT download page. Thanks for any answer.can you post your code? Does your thread start if you execute the button handler code without GUI?
Jul 31 2008
The code is as follows: The problem is if some exception happens, it should open up a messagebox(messagebox works without being inside a thread), and I haven't tested the code without the DWT environment, but I think it might be the Tango problem, not the DWT problem. This code works if it's not in a thread though. and there is a thread.start() right after the Thread definition. Note : text_file_input, text_file_output, button_convert, and thread are all declared as static scope. thread = new Thread( { int int_lines = 0; FileConduit file_input = null; FileConduit file_output = null; DataOutput file_out = null; try { file_input = new FileConduit (text_file_input.getText()); file_output = new FileConduit (text_file_output.getText(), FileConduit.WriteCreate); file_out = new DataOutput (file_output); foreach (str_line; new LineInput(file_input)) { int_lines++; int int_last_index = 0; foreach ( int_index, int_item ; int_idn_locations) { int int_item1 = int_item -1 ; if (int_item1 + 10 > str_line.length) break; if ((int_item1 != 0) && (int_last_index != int_item1)) file_out.write (str_line[int_last_index..int_item1]); if (str_line[int_item1..int_item1+10] != " ") file_out.write(cjidn_encode(str_line[int_item1..int_item1+10])); else file_out.write(cast(char[])(" ")); int_last_index = int_item1 + 10; } file_out.write(str_line[int_last_index..length]); file_out.write("\r\n"); Thread.sleep(0.001); } auto sprint0 = new Sprint!(char); MessageBox messageBox0 = new MessageBox(DWT.OK|DWT.ICON_INFORMATION); messageBox0.setText("Done"); messageBox0.setMessage(sprint0("{} Lines", int_lines)); messageBox0.open(); } catch (Exception o) { auto sprint = new Sprint!(char); MessageBox messageBox = new MessageBox(DWT.OK|DWT.ICON_ERROR); messageBox.setText("Error"); messageBox.setMessage(sprint("Error : {}", o.msg)); messageBox.open(); } finally { if (!(file_out is null)) file_out.flush(); if (!(file_output is null)) file_output.close(); if (!(file_input is null)) file_input.close(); button_convert.setEnabled(true); } });
Jul 31 2008
Plumm schrieb:The code is as follows: The problem is if some exception happens, it should open up a messagebox(messagebox works without being inside a thread), and I haven't tested the code without the DWT environment, but I think it might be the Tango problem, not the DWT problem. This code works if it's not in a thread though.It is not allowed to access any DWT function from a thread that is not the "GUI thread". The calls to MessageBox in the thread might throw exception, because they detect an illegal thread access. To solve this, there is Display.syncExec and asyncExec. Display.getCurrent().syncExec( dgRunnable({ MessageBox messageBox0 = new MessageBox(DWT.OK|DWT.ICON_INFORMATION); messageBox0.setText("Done"); messageBox0.setMessage(sprint0("{} Lines", int_lines)); messageBox0.open(); }));
Jul 31 2008
Thanks for the response. However, I think it's the problem that threading doesn't work. Even if I remove everything in the thread and simply but a static variable change in the thread. It's not executed either. A bit wierd....
Aug 01 2008
Plumm schrieb:Thanks for the response. However, I think it's the problem that threading doesn't work. Even if I remove everything in the thread and simply but a static variable change in the thread. It's not executed either. A bit wierd....ok, i would like to take a look at your problem. But i would need a simple to compile and execute example.
Aug 01 2008
Ignore the previous post...I made a mistake by creating a new class that extends Thread overriding the run function. And now it works. Problem solved... Thanks for the help.
Aug 01 2008
Plumm wrote:Ignore the previous post...I made a mistake by creating a new class that extends Thread overriding the run function.Thread.run is private, it can't be overridden :-)And now it works. Problem solved...Glad to hear it. Sean
Aug 04 2008