diff --git a/go2lgl_l09/go2lgl_l09.go b/go2lgl_l09/go2lgl_l09.go
index cedf441..c6ee4d6 100755
--- a/go2lgl_l09/go2lgl_l09.go
+++ b/go2lgl_l09/go2lgl_l09.go
@@ -19,6 +19,8 @@ import (
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/gui"
"github.com/therecipe/qt/widgets"
+
+ "github.com/0xAX/notificator"
)
const (
@@ -28,12 +30,19 @@ const (
var timestamp [2]int64
+var notify *notificator.Notificator
+
var wg, wgcli, wggui sync.WaitGroup // !
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
timestamp[0] = time.Now().UnixNano()
+ notify = notificator.New(notificator.Options{
+ DefaultIcon: "icon/default.png",
+ AppName: "LGL-Demo",
+ })
+
var töpfchenAlle []int = make([]int, anzahlTöpfchen, anzahlTöpfchen)
var c chan bool = make(chan bool, 1)
@@ -56,34 +65,44 @@ func main() {
ui_progressBar.SetValue(i)
})
- //ui_graphicsView.ConnectPaintEvent(func(e *gui.QPaintEvent) {
- // //ui_graphicsView.DrawBackground(gui.QPainter.SetBrush(gui.NewQBrush()), rect)
- //})
+ /*
+ ui_graphicsView.ConnectPaintEvent(func(e *gui.QPaintEvent) {
+ //ui_graphicsView.DrawBackground(gui.QPainter.SetBrush(gui.NewQBrush()), rect)
+ img := gui.NewQImage3(32, 32, gui.QImage__Format_ARGB32)
+ for i := 0; i < 32; i++ {
+ for j := 0; j < 32; j++ {
+ //img.SetPixelColor2(i, j, gui.NewQColor3(j*8, i*2, i*2, 255))
+ img.SetPixelColor2(i, j, gui.NewQColor3(255, 255, 0, 255))
+ }
+ }
+
+ })*/
ui_graphicsView.ConnectResizeEvent(func(e *gui.QResizeEvent) {
- //ui_graphicsView.FitInView(c_scene.ItemsBoundingRect(), core.Qt__KeepAspectRatio)
+ ui_graphicsView.FitInView(c_scene.ItemsBoundingRect(), core.Qt__KeepAspectRatio)
fmt.Println("Hallo")
})
//pinsel := ui_graphicsView.ForegroundBrush()
// paintengine := ui_graphicsView.PaintEngine()
- dx, dy := 32, 32
+ dx, dy := int(anzahlTöpfchen), int(anzahlTöpfchen)
- img := gui.NewQImage3(dx, dy, gui.QImage__Format_ARGB32)
+ //c_img := gui.NewQImage()
+ c_img := gui.NewQPainter() // NewQImage3(dx, dy, gui.QImage__Format_ARGB32)
- for i := 0; i < dx; i++ {
+ /*for i := 0; i < dx; i++ {
for j := 0; j < dy; j++ {
- img.SetPixelColor2(i, j, gui.NewQColor3(j*8, i*2, i*2, 255))
+ //c_img.SetPixelColor2(i, j, gui.NewQColor3(j*8, i*2, i*2, 255))
+ c_img.SetPixelColor2(i, j, gui.NewQColor3(232, 232, 232, 255))
}
- }
-
- img = img.Scaled2(ui_graphicsView.Height(), ui_graphicsView.Width(), core.Qt__IgnoreAspectRatio, core.Qt__FastTransformation)
-
- Item := widgets.NewQGraphicsPixmapItem2(gui.NewQPixmap().FromImage(img, 0), nil)
+ }*/
- c_scene.AddItem(Item)
+ //c_img = c_img.Scaled2(ui_graphicsView.Height(), ui_graphicsView.Width(), core.Qt__IgnoreAspectRatio, core.Qt__FastTransformation)
+ c_item := widgets.NewQGrap //NewQGraphicsPixmapItem2(gui.NewQPixmap().FromImage(c_img, 0), nil)
+ c_scene.AddItem(c_item)
+ c_img = c_img.Scaled2(ui_graphicsView.Height(), ui_graphicsView.Width(), core.Qt__IgnoreAspectRatio, core.Qt__FastTransformation)
ui_graphicsView.SetScene(c_scene)
ui_graphicsView.Show()
@@ -106,12 +125,29 @@ func main() {
ui_textBrowser.Append(fmt.Sprint("\u2690", *t))
ui_lcdNummer.Display2(int(anzahlKugeln))
ui_progressBar.SetValue(100)
+
return
default:
ui_textBrowser.Append(fmt.Sprint("\u231B ", *t, runtime.NumGoroutine()))
ui_lcdNummer.Display2(i)
ui_progressBar.SetValue(int(math.Floor((float64(i) / float64(anzahlKugeln) * 100) + .5)))
+ /* for i, v := range *t {
+ c_img.SetPixelColor2(i+1*(ui_graphicsView.Width()/int(anzahlTöpfchen)), (ui_graphicsView.Height()/int(anzahlKugeln)*20)*v, gui.NewQColor3(255, 0, 0, 255))
+ fmt.Println(i, v)
+ }
+ c_img.SetPixelColor2(100, 100, gui.NewQColor3(255, 0, 255, 255))
+ c_img.SetPixelColor2(100, 101, gui.NewQColor3(255, 0, 255, 255))
+ c_img.SetPixelColor2(100, 102, gui.NewQColor3(255, 0, 255, 255))
+ c_img.SetPixelColor2(100, 103, gui.NewQColor3(255, 0, 255, 255))
+ c_img.SetPixelColor2(101, 100, gui.NewQColor3(255, 0, 255, 255))
+ c_img.SetPixelColor2(101, 101, gui.NewQColor3(255, 0, 255, 255))
+ c_img.SetPixelColor2(101, 102, gui.NewQColor3(255, 0, 255, 255))
+ c_img.SetPixelColor2(101, 103, gui.NewQColor3(255, 0, 255, 255))
+ c_img = c_img.Scaled2(ui_graphicsView.Height(), ui_graphicsView.Width(), core.Qt__IgnoreAspectRatio, core.Qt__FastTransformation)
+ c_item2 := widgets.NewQGraphicsPixmapItem2(gui.NewQPixmap().FromImage(c_img, 0), nil)
+ c_scene.AddItem(c_item2)
+ */
time.Sleep(time.Second * 1)
}
}
@@ -136,7 +172,8 @@ func main() {
close(c)
timestamp[1] = time.Now().UnixNano()
- fmt.Printf("\nProzess ist fertig und hat %v Sekunden gedauert!\n\n", (float64(timestamp[1]-timestamp[0]) * math.Pow(10, -9)))
+
+ notify.Push("LGL-Demo", fmt.Sprintf("\nProzess ist fertig und hat %v Sekunden gedauert!\n\n", (float64(timestamp[1]-timestamp[0])*math.Pow(10, -9))), "/home/user/icon.png", notificator.UR_CRITICAL)
}
diff --git a/go2lgl_l09/myGui/myGui.go b/go2lgl_l09/myGui/myGui.go
index 00d8eb0..739c0fb 100755
--- a/go2lgl_l09/myGui/myGui.go
+++ b/go2lgl_l09/myGui/myGui.go
@@ -32,6 +32,10 @@ func ErzeugeLayout(widget *widgets.QWidget, formWidget *widgets.QWidget, t *[]in
widget.SetWindowTitle("go LGL")
widget.ShowMaximized()
+ //ui_graphicsView.SetBackgroundBrush(gui.NewQBrush2(core.Qt__Dense4Pattern))
+ //ui_graphicsView.SetHorizontalScrollBarPolicy(core.Qt__ScrollBarAlwaysOff)
+ //ui_graphicsView.SetVerticalScrollBarPolicy(core.Qt__ScrollBarAlwaysOff)
+
return ui_textBrowser, ui_lcdNummer, ui_progressBar, ui_graphicsView
}
diff --git a/go2lgl_l09/myGui/qml/formular.ui b/go2lgl_l09/myGui/qml/formular.ui
index 07ed45b..1f9ad1e 100755
--- a/go2lgl_l09/myGui/qml/formular.ui
+++ b/go2lgl_l09/myGui/qml/formular.ui
@@ -37,6 +37,9 @@
true
+
+ QAbstractScrollArea::AdjustIgnored
+
diff --git a/go2lgl_l10/go2lgl_l10.go b/go2lgl_l10/go2lgl_l10.go
index cafd6e4..fdfec58 100755
--- a/go2lgl_l10/go2lgl_l10.go
+++ b/go2lgl_l10/go2lgl_l10.go
@@ -1,47 +1,94 @@
/*
Landesamt für Geoinformation und Landentwicklung, Referat 35
Einführung in die Sprache Go, 25.7.2017
-Lektion 10: Ganz einfacher Webserver
+Lektion 10: Performancesteigerung durch Go-Nebenläufigkeit (Routinen und Prozesse)
*/
package main
import (
"fmt"
- "net/http"
+ "math"
+ "runtime"
+ "strconv"
+ "sync"
+ "time"
)
-func handler00(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintf(w, "Guckuck %s!", r.URL.Path[1:])
- fmt.Println(r.URL)
-}
+var (
+ maxThreads, maxRoutines int8
-func handler01(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintf(w, `
-
-
-
-Testseite 01
-
-Du befindest Dich auf Seite `+"%s!"+`
-`, r.URL.Path[1:])
-}
+ gesuchteZahl int = 8978793242417717171
+ timestamp [2]int64
+)
+
+const ThreadFaktor int8 = 4 //!
+
+var wg sync.WaitGroup
+
+func is_prime(n *int) bool {
+ if *n == 2 { // 2 ist die einzige gerade Primzahl
+ return true
+ } else if *n < 2 || *n&1 == 0 { // falls zahl < 2 oder gerade Zahl -> keine Primzahl (1 keine Primzahl)
+ return false
+ } else {
+ var reportChannel, stopChannel chan bool = make(chan bool, maxRoutines), make(chan bool, maxRoutines-1)
-func handler02(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintf(w, `
-
-
-
-
-Testseite 01
-
-Du befindest Dich jetzt auf Seite `+"%s!"+`
-`, r.URL.Path[1:])
+ maxSchleife := int(math.Sqrt(float64(*n)))
+
+ for start := int8(3); start <= 3+(maxRoutines-1)*2; start += 2 {
+ wg.Add(1)
+ go func(s int8, e, g *int, mf *int8, cr, cs chan bool) {
+ defer wg.Done()
+ select {
+ case <-cs: // Heh, Ihr könnt aufhören
+ return
+ default:
+ for i := int(s); i <= *e; i += int(*mf) * 2 {
+ //fmt.Println(i)
+ if *g%i == 0 {
+ select {
+ case cr <- true:
+ default:
+ fmt.Println("Channel voll!")
+ }
+ return
+ }
+ }
+ }
+ cr <- false
+ }(start, &maxSchleife, n, &maxRoutines, reportChannel, stopChannel)
+ }
+
+ select {
+ case cvalue, cstatus := <-reportChannel:
+ if cstatus && cvalue == true {
+ for i := int8(1); i < maxRoutines; i++ { // 1 to < maxThreads ist effizienter als 0 to < maxThreads-1
+ stopChannel <- true
+ }
+ wg.Wait()
+ close(reportChannel)
+ close(stopChannel)
+ return false
+ }
+ }
+ return true
+ }
}
func main() {
+ maxThreads = int8(runtime.NumCPU()) //!
+ maxRoutines = maxThreads * ThreadFaktor
+ runtime.GOMAXPROCS(int(maxThreads))
+
+ timestamp[0] = time.Now().UnixNano()
+
+ if is_prime(&gesuchteZahl) == true {
+ fmt.Println(strconv.Itoa(gesuchteZahl) + " IST eine Primzahl")
+ } else {
+ fmt.Println(strconv.Itoa(gesuchteZahl) + " ist KEINE Primzahl")
+ }
+
+ timestamp[1] = time.Now().UnixNano()
- http.HandleFunc("/", handler00)
- http.HandleFunc("/aa", handler01)
- http.HandleFunc("/bb", handler02)
- http.ListenAndServe(":8080", nil)
+ fmt.Printf("\nProzess ist fertig und hat mit %v Routinen, verteilt auf %v Threads, %v Sekunden gedauert!\n\n", maxRoutines, maxThreads, (float64(timestamp[1]-timestamp[0]) * math.Pow(10, -9)))
}
diff --git a/go2lgl_l11/go2lgl_l11.go b/go2lgl_l11/go2lgl_l11.go
index 9a4cbbd..6479a06 100755
--- a/go2lgl_l11/go2lgl_l11.go
+++ b/go2lgl_l11/go2lgl_l11.go
@@ -1,78 +1,47 @@
/*
Landesamt für Geoinformation und Landentwicklung, Referat 35
Einführung in die Sprache Go, 25.7.2017
-Lektion 11: Ein simpler Listener
+Lektion 11: Ganz einfacher Webserver
*/
package main
import (
- "bytes"
"fmt"
- "io"
- "log"
- "net"
- "strconv"
- "strings"
+ "net/http"
)
-const (
- constNET_PROTOCOL = "tcp"
- constNET_PORT = 1234
-)
-
-type dasOhr struct {
- dasGehörte *string
-}
-
-func (f dasOhr) Write(b []byte) (int, error) {
- //fmt.Println(*f.dasGehörte, string(b))
- *f.dasGehörte = string(b)
- return len(strings.TrimSpace(string(b))), nil
+func handler00(w http.ResponseWriter, r *http.Request) {
+ fmt.Fprintf(w, "Guckuck %s!", r.URL.Path[1:])
+ fmt.Println(r.URL)
}
-func Concatstring(args ...string) string {
- var buffer bytes.Buffer
- for _, v := range args {
- buffer.WriteString(v)
- }
- return buffer.String()
+func handler01(w http.ResponseWriter, r *http.Request) {
+ fmt.Fprintf(w, `
+
+
+
+Testseite 01
+
+Du befindest Dich auf Seite `+"%s!"+`
+`, r.URL.Path[1:])
}
-type Concatablestring string
-
-func (f *Concatablestring) Join(args ...string) string {
- var buffer bytes.Buffer
- buffer.WriteString(string(*f))
- for _, v := range args {
- buffer.WriteString(v)
- }
- return buffer.String()
+func handler02(w http.ResponseWriter, r *http.Request) {
+ fmt.Fprintf(w, `
+
+
+
+
+Testseite 01
+
+Du befindest Dich jetzt auf Seite `+"%s!"+`
+`, r.URL.Path[1:])
}
func main() {
- bb := dasOhr{new(string)}
-
- //gsocks := Concatstring(":", strconv.Itoa(constNET_PORT)) // Lausche an TCP port 1234
- var javaLoversLikeObjekts Concatablestring = ":"
- gsocks := javaLoversLikeObjekts.Join(strconv.Itoa(constNET_PORT))
-
- l, err := net.Listen(constNET_PROTOCOL, gsocks)
- if err != nil {
- log.Fatal(err)
- }
- defer l.Close()
- for {
- // Warte auf eine Connection
- conn, err := l.Accept()
- if err != nil {
- log.Fatal(err)
- }
-
- //io.CopyBuffer(tt, conn, make([]byte, 18))
- io.Copy(bb, conn)
- fmt.Print("Televisor meldet: ", *bb.dasGehörte)
- fmt.Printf("Dieses Gedankenverbrechen wurde präsentiert von %v\n", conn.RemoteAddr())
- conn.Close()
- }
+ http.HandleFunc("/", handler00)
+ http.HandleFunc("/aa", handler01)
+ http.HandleFunc("/bb", handler02)
+ http.ListenAndServe(":8080", nil)
}
diff --git a/go2lgl_l12/go2lgl_l12.go b/go2lgl_l12/go2lgl_l12.go
new file mode 100755
index 0000000..2efefca
--- /dev/null
+++ b/go2lgl_l12/go2lgl_l12.go
@@ -0,0 +1,78 @@
+/*
+Landesamt für Geoinformation und Landentwicklung, Referat 35
+Einführung in die Sprache Go, 25.7.2017
+Lektion 12: Ein simpler Listener
+*/
+package main
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "log"
+ "net"
+ "strconv"
+ "strings"
+)
+
+const (
+ constNET_PROTOCOL = "tcp"
+ constNET_PORT = 1234
+)
+
+type dasOhr struct {
+ dasGehörte *string
+}
+
+func (f dasOhr) Write(b []byte) (int, error) {
+ //fmt.Println(*f.dasGehörte, string(b))
+ *f.dasGehörte = string(b)
+ return len(strings.TrimSpace(string(b))), nil
+}
+
+func Concatstring(args ...string) string {
+ var buffer bytes.Buffer
+ for _, v := range args {
+ buffer.WriteString(v)
+ }
+ return buffer.String()
+}
+
+type Concatablestring string
+
+func (f *Concatablestring) Join(args ...string) string {
+ var buffer bytes.Buffer
+ buffer.WriteString(string(*f))
+ for _, v := range args {
+ buffer.WriteString(v)
+ }
+ return buffer.String()
+}
+
+func main() {
+
+ bb := dasOhr{new(string)}
+
+ //gsocks := Concatstring(":", strconv.Itoa(constNET_PORT)) // Lausche an TCP port 1234
+ var javaLoversLikeObjekts Concatablestring = ":"
+ gsocks := javaLoversLikeObjekts.Join(strconv.Itoa(constNET_PORT))
+
+ l, err := net.Listen(constNET_PROTOCOL, gsocks)
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer l.Close()
+ for {
+ // Warte auf eine Connection
+ conn, err := l.Accept()
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ //io.CopyBuffer(tt, conn, make([]byte, 18))
+ io.Copy(bb, conn)
+ fmt.Print("Televisor meldet: ", *bb.dasGehörte)
+ fmt.Printf("Dieses Gedankenverbrechen wurde präsentiert von %v\n", conn.RemoteAddr())
+ conn.Close()
+ }
+}