Synchronize Class fields between different threads
bauss
jj_1337 at live.dk
Fri Nov 10 15:03:16 UTC 2017
On Friday, 10 November 2017 at 15:01:30 UTC, bauss wrote:
> On Friday, 10 November 2017 at 14:36:03 UTC, DrCataclysm wrote:
>> On Friday, 10 November 2017 at 14:27:41 UTC, bauss wrote:
>>> On Friday, 10 November 2017 at 14:13:26 UTC, DrCataclysm
>>> wrote:
>>>> [...]
>>>
>>> _client is allocated in the heap.
>>>
>>> Socket accept(); returns the socket created from Socket
>>> accepting().
>>>
>>> Which is like below:
>>>
>>> protected Socket accepting() pure nothrow
>>> {
>>> return new Socket;
>>> }
>>
>> thank you, i thought i was going mad.
>>
>> It is working now. The problem was that the debugger in
>> eclipse ddt seems to completely broken. If i run it directly
>> from bash it is working.
>>
>> One last question: is there a function in the std to wait for
>> a task to finish within a time limit?
>
> Not an ideal solution, but should work: (I'm not aware of any
> build-in solutions using Phobos' tasks.
>
> ```
> static const timeLimit = 1000; // Wait for the task up to 1000
> milliseconds
>
> while (!task.done && timeLimit)
> {
> import core.time : Thread, dur;
>
> Thread.sleep( dur!("msecs")(1) ); // Preventing the CPU to
> go nuts
> timeLimit--;
> }
>
> if (task.done)
> {
> auto value = task.yieldForce();
> }
> ```
>
> Could make it a function though:
>
> ```
> bool yieldTimeLimit(Task)(Task task)
> {
> while (!task.done && timeLimit)
> {
> import core.time : Thread, dur;
>
> Thread.sleep( dur!("msecs")(1) );
> timeLimit--;
> }
>
> return task.done;
> }
>
> ...
>
> if (yieldTimeLimit(task))
> {
> auto value = task.yieldForce();
> }
> ```
Pardon my brain fart.
The last bit should be:
```
bool yieldTimeLimit(Task)(Task task, size_t timeLimit)
{
while (!task.done && timeLimit)
{
import core.time : Thread, dur;
Thread.sleep( dur!("msecs")(1) );
timeLimit--;
}
return task.done;
}
...
if (task.yieldTimeLimit(1000)) // Waits 1000 milliseconds
{
auto value = task.yieldForce();
}
```
More information about the Digitalmars-d-learn
mailing list