|
Hello,
If you modelled it right, it's even more easy from a maintainance point of view. You should devide your app in the view (form) and the control (app logic). From the logic, you fire events to the view and do your tricks from there. This allows easy multithreading and ensures a better user experience!
IMHO you should go for multithreading!
Behind every great black man...
... is the police. - Conspiracy brother
Blog[^]
|
|
|
|
|
See if these code snips help at all - then from your main location you just create one of these and got xx.run. Just an example, hope it helps
Glenn
///
/// Summary description for ThreadEx.
///
/*
***************************************************************************
**
** Class: ThreadEx
**
** Description:
** This is our thread class
**
** Notes:
**
*/
public class ThreadEx
{
/*
** Local Variables
*/
protected Thread m_thread = null;
protected ThreadStart m_start = null;
protected bool m_bStopped = true;
/*
***************************************************************************
**
** Property(bool): Stop
*/
///
/// Set the Stop Flag
///
///
public bool Stop
{
get{return m_bStopped;}
set{m_bStopped = value;}
}
/*
***************************************************************************
**
** Property(bool): isStopped
*/
///
/// Check to see if it is stopped - redundant
///
///
public bool isStopped
{
get{return Stop;}
}
/*
***************************************************************************
**
** Function: Start
*/
///
/// Start the Thread (Run) on the form
///
///<returns>void
///
public void Start()
{
Stop = false;
m_start = new ThreadStart(Run);
m_thread = new Thread(m_start);
m_thread.Start();
}
/*
***************************************************************************
**
** Function: WaitTillDone
*/
///
/// Wait till the thread is done (Infinitely)
///
///<returns>bool - True if thread is done
///
public bool WaitTillDone()
{
return m_thread.Join(Timeout.Infinite);
}
/*
***************************************************************************
**
** Function: WaitTillDone
*/
///
/// Wait for iMilli milliseconds for thread to complete
///
///<param name="iMilli" type="int" />
///<returns>void
///
public void WaitTillDone(int iMilli)
{
m_thread.Join(iMilli);
}
/*
***************************************************************************
**
** Function: IsDone
*/
///
/// Check to see if the thread is completed
///
///<returns>bool
///
public bool isDone
{
get{return m_thread.Join(0);}
}
/*
***************************************************************************
**
** Function: Kill
*/
///
/// Kill the thread
///
///<returns>void
///
public void Kill()
{
m_thread.Abort();
}
/*
***************************************************************************
**
** Function: Run
*/
///
/// This is the overloaded run function
///
///<returns>void
///
public virtual void Run()
{
}
}
public class RFC868TimeClient : ThreadEx
{
/*
** Local Variables
*/
protected string m_strTimeServer;
protected int m_iInterval;
#region SystemTime in Kernel32
/*
** Import the Kernel32 Function
*/
[DllImport("kernel32.dll", SetLastError=true)]
protected static extern int SetLocalTime(IntPtr ptrSystemTime);
/*
***************************************************************************
**
** Class: CSystemTime
**
*/
///
/// Class to behave like the SYSTEMTIME Structure in win32
///
///
public class CSystemTime
{
protected enum Var
{
Year = 0,
Month = 1,
DayOfWeek = 2,
Day = 3,
Hour = 4,
Minute = 5,
Second = 6,
Millisecond = 7,
AllocCount = 8
}
protected System.UInt16[] auData = new UInt16[(int)Var.AllocCount];
public System.UInt16[] Data
{
get{return auData;}
}
public System.UInt16 Year
{
get{return auData[(int)Var.Year];}
set{auData[(int)Var.Year] = value;}
}
public System.UInt16 Month
{
get{return auData[(int)Var.Month];}
set{auData[(int)Var.Month] = value;}
}
public System.UInt16 Day
{
get{return auData[(int)Var.Day];}
set{auData[(int)Var.Day] = value;}
}
public System.UInt16 DayOfWeek
{
get{return auData[(int)Var.DayOfWeek];}
set{auData[(int)Var.DayOfWeek] = value;}
}
public System.UInt16 Hour
{
get{return auData[(int)Var.Hour];}
set{auData[(int)Var.Hour] = value;}
}
public System.UInt16 Minute
{
get{return auData[(int)Var.Minute];}
set{auData[(int)Var.Minute] = value;}
}
public System.UInt16 Second
{
get{return auData[(int)Var.Second];}
set{auData[(int)Var.Second] = value;}
}
public System.UInt16 Millisecond
{
get{return auData[(int)Var.Millisecond];}
set{auData[(int)Var.Millisecond] = value;}
}
}
/*
***************************************************************************
**
** Function: SetLocalTime
*/
///
///
///
///<param name="SystemTime" type="TimeService.RFC868Service.RFC868TimeClient.CSystemTime" />
///<returns>bool
///
protected bool SetLocalTime(CSystemTime SystemTime)
{
/*
** Local Variables
*/
bool bOk = true;
GCHandle gch = GCHandle.Alloc(SystemTime.Data, GCHandleType.Pinned);
if(0 == SetLocalTime(gch.AddrOfPinnedObject()))
{
bOk = false;
}
gch.Free();
return bOk;
}
#endregion SystemTime in Kernel32
/*
***************************************************************************
**
** Property(string): TimeServerAddress
*/
///
/// Store the Server Address we want to connect to
///
///
public string TimeServerAddress
{
get{return m_strTimeServer;}
set{m_strTimeServer = value;}
}
/*
***************************************************************************
**
** Property(int): Interval
*/
///
/// Set the Time Interval to wait between client updates
///
///
public int Interval
{
get{return m_iInterval;}
set{m_iInterval = value;}
}
/*
***************************************************************************
**
** Function: Run
*/
///
/// This is the Time Server
///
///<returns>void
///<exception cref="System.Exception">Thrown
///<remarks>
///
///<example>How to use this function
///
<br />
///
///
public override void Run()
{
/*
** Till we have to stop process here
*/
while(!isStopped)
{
/*
** Local Variables
*/
TcpClient tcpClient = new TcpClient();
NetworkStream sClient = null;
TimeInfo Info = new TimeInfo();
TimeSpan tsWait = new TimeSpan(0, 0, Interval, 0, 0);
DateTime dtWait = DateTime.Now + tsWait;
CSystemTime SystemTime = new CSystemTime();
DateTime dtNow;
try
{
/*
** Connect to the Server
*/
tcpClient.Connect(m_strTimeServer, RFC868PORT);
sClient = tcpClient.GetStream();
sClient.Read(Info.Array, 0, Info.Array.Length);
tcpClient.Close();
/*
** Get us a Date Time thingie
*/
dtNow = TimeInfo.GetDateTime(Info.UTC);
/*
** Here we have to set the Time of the system
*/
SystemTime.Year = (ushort)dtNow.Year;
SystemTime.Month = (ushort)dtNow.Month;
SystemTime.Day = (ushort)dtNow.Day;
SystemTime.DayOfWeek = (ushort)dtNow.DayOfWeek;
SystemTime.Hour = (ushort)dtNow.Hour;
SystemTime.Minute = (ushort)dtNow.Minute;
SystemTime.Second = (ushort)dtNow.Second;
SystemTime.Millisecond = (ushort)dtNow.Millisecond;
/*
** Set the time and hope that it works
*/
SetLocalTime(SystemTime);
}
catch(Exception)
{
}
finally
{
}
/*
** Wait till it is time to do it again
*/
while(!isStopped && (dtWait > DateTime.Now))
{
System.Threading.Thread.Sleep(1000);
System.Windows.Forms.Application.DoEvents();
}
}
}
}
|
|
|
|
|
Hi all,
I have three questions about changing an edit box BG color:
I am trying to change the background color of a multi line edit box, I use the WM_CTLCOLOR message and it works but:
First:
initially, when the color changes, the area that changes is only the first line of the edit box (the first line has the desired background color, while the other lines have the white(default) background color), and as I add lines (Enter Key) the following line changes color and so on.
how to solve this situation? I want the whole control to be painted with the desired bg color.
Second, Even when I change the color of a single line edit box, the color changes, but there still small rectangles of the default bg color in the bottom and the right side of the edit box, it really doesnt exactly have the same effect as writing in VB:
Text1.BGColor=vbBlack
Why?!!!
Thrid and last,
When I use the WM_CTLCOLOR message to change my edit box bg color, if the Locked state of the edit box is set, the color is not changed at all, I dont think its wrong to have a locked edit box with a black bg color.
how to solve this?
I hope I will find some help here.
Regards,
Mohammad Gdeisat
|
|
|
|
|
I think sheet of the pages is the place, but how can a page save a value in a variable in the sheet? Or , any other good ways? Thanks.
|
|
|
|
|
followait wrote:
I think sheet of the pages is the place, but how can a page save a value in a variable in the sheet?
What are you talking about ????
|
|
|
|
|
cedric moonen wrote:
What are you talking about ????
Tequila ?
hum, maybe he was saying - in his bad word - that he wanted to save in a property Sheet one variable that is to be shared between its property pages...
TOXCCT >>> GEII power [toxcct][VisualCalc]
|
|
|
|
|
Hello!
I wonder if there is some way or some trick to gather some info during compile time and using it at runtime ?
example1:
We have many cpp files. We have some #define CPP_COUNTER 0. There would be some code (macro?) at the begining of every cpp file which would increase this counter for 1. When linking the project, CPP_COUNTER would hold the number of cpp files. In runtime I would be aware of cpp files in the project by reading CPP_COUNTER definition.
example2:
We have many files in the project, but functionaly they are divided in few modules (dsp, writter, reader, etc). At compile time every cpp file would have at the begining some code which would register (to some global variable) to which module it belongs. Something like
REGISTER_MODULE(_FILENAME_, "disk writter")
In runtime I would be aware of all the modules in the system by looking at the global variable of all registered modules.
I would need something like example2 shows. Is it even possible? Is there some way?
Best regards,
Rostfrei
|
|
|
|
|
I have generated a window using AppWizard with a default DOC View classes. now i split my window into two. In the new pane i want to display log activities. how should i do it?
What i did was i derived a runtime class from CFormView and Created a Listbox in the form and using it. But the thing is i cannot access the memberfunctions of CFormView derived class because its constructor is private. And If I change it to Public it Gives assertion failure. Now if i want to access member function how can i do it.
One solution i thought is if i am able to access the only object crteated, i can use it. But i don't know how to get that object
|
|
|
|
|
CFrameWnd has a method GetActiveView().
Try using that to get a pointer to your view object.
|
|
|
|
|
Hi - I have a dll, that
a) I dont have the source for
b) I dont have .h files for
c) I have minimal documentation for
I can produce a dumpbin /exports, and I know it was written using MS VC++ .. Now, Im a bit rusty with dll's, years ago, the fist time I approached this nasty issue, I defined :-
#define SZ_DPS_ProcessTransmit "?ProcessTransmit@@YAFPBD000@Z"
typedef short (__cdecl *LPDPS_ProcessTransmit) (char const *, char const *, char const *, char const *);
LPDPS_ProcessTransmit m_DpsProcessTransmit;
Most of the functions look like ?Transmit@@YAFPBD000@Z in the dumpbin - but as far as I know, there's nothing to tell me what calling convention was used, so the __cdecl used in the definition above was an assumption ..
So, was it a good assumption - or should I use stdcall ?? There's a penalty here - its not the easiest of systems to re-work / work on - its part on an encryption system that doesnt like being toyed with ..
any ideas ??
thanks, Garth
|
|
|
|
|
VS.NET includes a program UNDNAME to give you the undecorated definition of the name. You guessed right, the routine is a __cdecl.
You don't need to define the SZ_DPS_ProcessTransmit. Name decoration happens automatically.
Tim Smith
I'm going to patent thought. I have yet to see any prior art.
|
|
|
|
|
Many thanks Tim - much appreciated - I'll remember UNDNAME
cheers, Garth
|
|
|
|
|
How should i design my GUI's Architecture? What steps should I follow?
Thanks.
I will rank if your reply helps.
|
|
|
|
|
Pretty difficult to answer given the few information we have... What kind of GUI do you want ? Are you using the MFC's ? Is it a console app, Win32 app, ...
|
|
|
|
|
I want my gui to be done using MFC. It is a GUI for an USB HID device.
How should i decide what class should i make, in which should class sholud place the member function, what should be placed in dll etc.
Thanks a lot for your time and help.
|
|
|
|
|
Hello,
From you other post, I understand that you want to create an application that communicates with an USB device, not? I also understand that you don't have any clue about how to design an architecture for your application.
May I suggest that you start reading about how to design software systems! There is no single plan that anyone can follow to achieve what people call a sound design.
In general, the following steps are taken:
<list> Devide the system in logically independant groups (often called layers).
Devide the functionality in a layer in logically independant sub-groups (often called packages).
Devide the functionality in a package in components that are managable.
You just should start with grouping functionality and keep that going until you got managable peaces that you can implement.
Behind every great black man...
... is the police. - Conspiracy brother
Blog[^]
|
|
|
|
|
I want to create a simple help-file that instructs my user how to use my program. How can i create a .hlp file that launches when the user presses F1.
_____________________________
...and justice for all
APe
|
|
|
|
|
You can use HTML Help Workshop...
All the information is available in MSDN.
|
|
|
|
|
Can someone give me some example of source code for the mewtocol header and terminator or some guide how to start to write a program that sending data using Mewtocol. Hope can undestand what I mean.
|
|
|
|
|
how to generate random numbers within a ceratain range..
let's say 500 and 2500
thanks
|
|
|
|
|
Search in this forum. The same question was raised some days ago.
|
|
|
|
|
Hi,
you use the rand() function like this:
2500-500= 2000
rand()%2001 //a number between 0 and 2000
rand()%2001 +500 // a number between 500 and 2500
Regards
|
|
|
|
|
Hi all,
i inherite a call of my own from CPreviewView. i put my own toolbar there,
problem is the default implementation of CPreviewView draws a dialog bar with Toolbar in it...how can i remove this default option?
thanks
Yaron Nir
Ask not what your application can do for you,
Ask what you can do for your application
|
|
|
|
|
I have not idea what to do if i want to make security in my program so that one user can open these forms and not others.
When I was programed in Access, i had a global variable where I want to put the user name from there i want to test if he had right or not, But with Visual c++ there is not global variable(i do know if it is possible to have it) what to do ?
I learn my self
|
|
|
|
|
There is global variables in C/C++ too, but it isn't considdered to be good programming practice to use it.
Use it like this:
In source1 (declaration + use)
char GlobalCharArray[100];
int GlobalInt;
In source2 (use):
extern char GlobalCharArray[100];
extern int GlobalInt;
Now you use the same char array and int from both source-codes.
|
|
|
|