|
Critical section objects can be used only by the threads of a single process!
soptest
|
|
|
|
|
soptest wrote:
Critical section objects can be used only by the threads of a single process!
Critical sections are used when you dont need cross-process suncronization. Only one thread will be allowed access to it.
MSDN snip follows...
[snip]
An object of class CCriticalSection represents a “critical section” — a synchronization object that allows one thread at a time to access a resource or section of code. Critical sections are useful when only one thread at a time can be allowed to modify data or some other controlled resource. For example, adding nodes to a linked list is a process that should only be allowed by one thread at a time. By using a CCriticalSection object to control the linked list, only one thread at a time can gain access to the list.
[/snip]
Regards,
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
|
oops.
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
Nish [BusterBoy] wrote:
You need to use thread synchronization objects.
I suggest a critical section here
What is it? Do you have any example?
Thanks!!!!
|
|
|
|
|
ChiYung wrote:
What is it? Do you have any example?
You can use the CCriticalSection class.
It has only two member functions you'll need to use.
Create a CCriticalSection object for your app.
Now call m_critsectionobject.Lock() to gain access to the section. Put this as the first line of the array accessing function. Now when other threads call this function, the Lock() will block till the first thread calls Unkock()
Eg:-
void function(...)
{
m_critsectionobject.Lock();
//do your stuff here
m_critsectionobject.Unlock();
}
Now you can safely call function() from multiple threads without fear of two threads accessing the array at the same time.
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
So, in this case, I can do it in this way: (example.....just algorithm....correct me if i am wrong)
This function will be called inside the thread function:
bool function (int x, CString InputString)
{
//can have others stuff here
m_critsectionobject.Lock();
If DBObject[x]= "free"
return true; //lock granted and thread can change DBObject[x] = InputString
Else, return false; //lock not grant and thread need to wait until DBObject[x]="free"
m_critsectionobject.Unlock();
//can have others stuff here
}
Question: If Thread A and B are trying to access the above "Critical section" code, the program will "automatically" create a "QUEUE", so that thread A and B can "line-up" to access this section??
Anyway..........THANK YOU VERY MUCH!!!!!!!!!!!!!!!!!!!!!!!!!!!
You are my angel!!!!!!!!!!!!!!!
|
|
|
|
|
ChiYung wrote:
Question: If Thread A and B are trying to access the above "Critical section" code, the program will "automatically" create a "QUEUE", so that thread A and B can "line-up" to access this section??
Yes. A and B will NOT access the function in parallel. B will wait till A has called Unlock().
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
You are so smart
You gave me a big hands!!!!
Thanks!!!!!!
|
|
|
|
|
I have a 3rd party Win32 DLL (a PGP wrapper) that I need to call from VC++. All I have is the DLL and a VB .BAS file that outlines the functions declarations as VB would call them.
I'm new to working with Win32 DLLs without an accompanying SDK kit. Can I set up the _stdcall(s) (using the VB code as a guide) or will need a .def or .h file from the DLL?
TIA
|
|
|
|
|
You'll need a header file for the function prototypes, huh? Otherwise it won't compile
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
Nish,
Thanks for your quick response.
I have the function prototypes via the VB .BAS file. Can I use those as a guide for the .h prototypes?
Thanks for your help.
|
|
|
|
|
Well even if you have a header file, you'd then need a lib file to link it with. Since you dont have that either, there is no point in making a header file based on the bas file.
Tell you what, dynamically load the DLL and make calls to it. That was the good old fashioned way I guess
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
That might be the way to go.
Anything I should be aware of if I go that route. (possibly some examples...)
Thanks
|
|
|
|
|
How can I lock a ComboBox from user input (typing). I just want a drop down list (i can use listbox).
Thx
XP
|
|
|
|
|
In the resource editor take Properties-Styles Tab and then set the Type to "Drop List". By default it will be "Dropdown". Now the editable box is replaced with a static one.
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
Can I do this dynamically too?
|
|
|
|
|
Anonymous wrote:
Can I do this dynamically too?
I am not sure about that. Some styles cannot be changed at run time. But try setting the CBS_DROPDOWNLIST style using ModifyStyle
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
Anonymous wrote:
Can I do this dynamically too?
I just tried this out :-
ModifyStyle(CBS_DROPDOWN,CBS_DROPDOWNLIST);
Didn't work
Nish
p.s. Perhaps there are other ways available. But I am not too sure now.
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
Check out this nifty little control.
And if words were wisdom, I'd be talking even more. The Offspring, I Choose
|
|
|
|
|
This is not realy a programming questin... but people can't connect to my socket apps.... 'm using WinMe and I have a mini network at home here...
------------------------------------
Rickard Andersson, Suza Computing
ICQ#: 50302279
I'm from the winter country SWEDEN!
------------------------------------
|
|
|
|
|
Is your sockets app running on a machine with an IP that is accesible from outside?
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
Hi!
Can you use a submenu of your dlg's main menu(like edit or file) as a popup menu too, using TrackPopUpmenu()? If so, will the command and updatecommand messages be handled automatically?
NC
|
|
|
|
|
NC wrote:
Can you use a submenu of your dlg's main menu(like edit or file) as a popup menu too, using TrackPopUpmenu()? If so, will the command and updatecommand messages be handled automatically?
Yes you can use a sub menu. The correct handlers will get called too.
Nish
One Nish is trouble enough.
Imagine 16 of me, dancing wild...
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
:jig::jig::jig::jig:
|
|
|
|
|
Hi!
Thanks for replying. The command msg handler is getting called, but not the Update_UI.. msg handler. Can you think af any reasons why?
Thanks so much,
NC
|
|
|
|